モデルがすでに存在するときに「rails generate scaffold」を実行するにはどうすればよいですか?


332

Railsは初めてなので、現在のプロジェクトは奇妙な状態です。

私が最初に生成したものの1つは「映画」モデルでした。次に、それをより詳細に定義し始め、いくつかのメソッドなどを追加しました。

rails generate scaffoldルーティング、ビュー、コントローラーなどを接続するためにそれを生成する必要があったことに気づきました。

足場を生成しようとしましたが、同じ名前の移行ファイルがすでに存在するというエラーが表示されました。

私の「映画」の足場を作成する最良の方法は何ですか?(レール3を使用)


1
おそらく、独自のコントローラーとビューおよびルートを作成するのが最善です。コンセプトについてさらに学習します
Ben Aubin

1
@ penne12に同意します。少なくとも最初は、概念に慣れるまで、生成されたすべてのコードが実行していることを理解できるようにします。
mydoghasworms 2015年

直接の関連はありませんが、失敗した場合はrails destroy <etc>を使用してください。私が始めたとき、これは本当に役に立ちました。
2015

1
@BenAubinは、真実ではありますが、Railsの美しさはボイラープレートを継続的に書く必要がないことです。
Romuloux 2017

回答:


596

TL; DRrails g scaffold_controller <name>

すでにモデルがあっても、rails generateオプションを使用して必要なコントローラーと移行ファイルを生成できます。実行rails generate -hすると、使用可能なすべてのオプションが表示されます。

Rails:
  controller
  generator
  helper
  integration_test
  mailer
  migration
  model
  observer
  performance_test
  plugin
  resource
  scaffold
  scaffold_controller
  session_migration
  stylesheets

モデルのコントローラー足場を生成する場合は、を参照してくださいscaffold_controller。わかりやすくするために、その説明を次に示します。

足場コントローラーとそのビューをスタブ化します。CamelCasedまたはunder_scoredのいずれかのモデル名と、ビューのリストを引数として渡します。コントローラ名は、モデル名の複数形バージョンとして取得されます。

モジュール内にコントローラーを作成するには、「parent_module / controller_name」のようなパスとしてモデル名を指定します。

これにより、app / controllersにコントローラークラスが生成され、ヘルパー、テンプレートエンジン、およびテストフレームワークジェネレーターが呼び出されます。

リソースを作成するには、resourceジェネレーターを使用し、マイグレーションを作成するには、migrationジェネレーターも確認できます(この狂気のすべてにパターンがあります)。これらには、不足しているファイルを作成してリソースを構築するためのオプションがあります。またはrails generate scaffold--skip存在するファイルをスキップするオプションを指定して実行することもできます:)

ジェネレーター内のオプションを確認することをお勧めします。これらは、本などで非常によく文書化されているとは思えませんが、非常に便利です。


12
うわー、プログラミングの質問に対して私がこれまでに得た最良の答えの1つ。ありがとう!

12
また、既存のモデルがありrails generate scaffold_controller MyModel、ビューレイヤーが生成されますが、モデル属性(テーブル列)が含まれていないため、手動で追加する必要があります。誰かがこれに対する修正を知っていますか?私はRails 3.2.8を使用しています。
aaronbartell

@aaronbartellモデル属性を気にしない「scaffold_controller」を生成するようにRailsに要求しています。あなたは、モデルがあまりにも、あなたが望む生成したい場合には、壊れていないgenerate scaffoldあなたはモデルを持っていますが、あなたが欲しいモデルに追加足場コントローラと新しい属性が必要な場合scaffold_generatorが続きmigrationますね変更のフィールドを持つ
リー・ジャービス

9
@Lee-どのaaronbartellがscaffold_controllerがそれに渡されたモデルの既存の属性に対応するビュー入力を生成しないのかを質問していません。これは有効な質問です... stackoverflow.com/q/17153864/165673
ヤリン

67

による素晴らしい答えLee Jarvisです。これはコマンドです。Userという既存のモデルがすでにあります。

rails g scaffold_controller User

10
テキストの段落を読むのが面倒くさい人たちに感謝します!
Chris Cirefice 16年

30

既存のデータベースでRailsアプリを開始する人のschema_to_scaffoldために、足場スクリプトを生成するために呼び出される素晴らしいgemがあります。それは出力します:

rails g scaffold users fname:string lname:string bdate:date email:string encrypted_password:string

あなたからのschema.rb私達のあなたの名前を変更したschema.rb. チェックそれ


2
これは素晴らしいlitleの宝石で、とても役に立ちます!Railsに組み込む必要があります。
Peter Andersson、2014年

13

Railsの5、あなたはまだ実行することができます

$rails generate scaffold movie --skip

足りない足場ファイルをすべて作成する、または

rails generate scaffold_controller Movie

コントローラとビューのみを作成します。

より良い説明については、レールの足場をチェックしてください



10

モデルのを利用scaffold_controllerして渡すことを忘れattributesないでください。そうしないと、属性なしでスキャフォールドが生成されます。

rails g scaffold_controller User name email
# or
rails g scaffold_controller User name:string email:string

このコマンドは、次のファイルを生成します。

create  app/controllers/users_controller.rb
invoke  haml
create    app/views/users
create    app/views/users/index.html.haml
create    app/views/users/edit.html.haml
create    app/views/users/show.html.haml
create    app/views/users/new.html.haml
create    app/views/users/_form.html.haml
invoke  test_unit
create    test/controllers/users_controller_test.rb
invoke  helper
create    app/helpers/users_helper.rb
invoke    test_unit
invoke  jbuilder
create    app/views/users/index.json.jbuilder
create    app/views/users/show.json.jbuilder
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.