Railsでスキャフォールドを生成することとモデルを生成することの違いは何ですか?どちらかを行うことの長所/短所は何ですか?
モデルを生成すると、モデルといくつかの関連コンポーネントが取得されます。このようなトピックを説明する私のお気に入りの方法の1つは、実際に試してみるか、他の人に試してもらうことです。したがって、Railsプロジェクト内で、コマンドRails generate model Foo name:string description:text
を入力すると、私は得るでしょう:
invoke active_record
create db/migrate/20130719012107_create_foos.rb
create app/models/foo.rb
invoke test_unit
create test/unit/foo_test.rb
create test/fixtures/foos.yml
最初の行はActive Record
を呼び出します。これは、基本的にモデルをデータベースに結び付けます。次の行は、移行ファイルと呼ばれるものを作成します。移行ファイルには、データベースを変更するための手順が含まれています。この最初の移行ファイルは、「foos」というデータベーステーブルを作成し、「name」と「description」の列も作成します。
次の行はモデル自体を作成します。モデルは基本的にはActiveRecordから継承するRubyクラスです。これは、Active Recordで呼び出すことができるすべてのメソッドをモデルで呼び出すことができることを意味します。最後の3行は、基本的にモデルに関連するテストファイル。RSpecを使用している場合は、代わりにスペックファイルが作成されます。
Railsアプリケーションにモデルのみが含まれている場合、ページに情報を表示するビューはなく、情報の流れを制御する指示もありません。選択は次のようになります。コントローラーを生成する(ビューを生成する)か、モデル、ビュー、コントローラーを生成し、routes.rbファイルに書き込むスキャフォールドを生成します。Rails generate scaffold foo
を実行すると、次のようになります。
invoke active_record
create db/migrate/20130719013307_create_foos.rb
create app/models/foo.rb
invoke test_unit
create test/unit/foo_test.rb
create test/fixtures/foos.yml
invoke resource_route
route resources :foos
invoke scaffold_controller
create app/controllers/foos_controller.rb
invoke erb
create app/views/foos
create app/views/foos/index.html.erb
create app/views/foos/edit.html.erb
create app/views/foos/show.html.erb
create app/views/foos/new.html.erb
create app/views/foos/_form.html.erb
invoke test_unit
create test/functional/foos_controller_test.rb
invoke helper
create app/helpers/foos_helper.rb
invoke test_unit
create test/unit/helpers/foos_helper_test.rb
invoke assets
invoke coffee
create app/assets/javascripts/foos.js.coffee
invoke scss
create app/assets/stylesheets/foos.css.scss
invoke scss
identical app/assets/stylesheets/scaffolds.css.scss
あなたの質問に答えるために、足場の利点はそれが速くて簡単であり、そしてすべてがあなたのために事前に構成されているということです。ただし、スキャフォールドとは独立してモデルを生成する(そして、必要に応じてコントローラー/ビューを生成し、routes.rbファイルを自分で作成する)ことの利点は、アプリとその外観と機能をより細かく制御できることです。不要なコードの場合は、ビヘイビア駆動開発やテスト駆動開発など、他の誰かが追加したいと思うかもしれないものを使用できます。
私の最後のアドバイスは次のとおりです。Railsは非常にユーザーフレンドリーなので、試してみてください。任意のgenerate
コマンドを対応するdestroy
コマンドで元に戻すことができます。たとえば、Rails destroy scaffold Foo
はRails generate Scaffold Foo name:string description:string
によって生成されたすべてのファイルを削除するので、実験によってプロジェクトを取り返しのつかないほど混乱させることを心配する必要はありません。
スキャフォールドの生成には、モデルの生成が含まれますが、
スキャフォールディングは、新しいRailsユーザーにとって良いスタートです。
と
$Rails generate scaffold <name>
完全なCRUD(作成、読み取り、更新、削除)Webインターフェースを使用して、すぐに使用できるコントローラー、モデル、およびビューを自動生成できます。モデルを生成するよりもはるかに簡単で高速ですが、生成するコードがアプリケーションに最適であるとは限りません。
scaffold は、簡単な例、簡単なモックアップ、またはテストの場合に使用するのに最適です。
気が変わって、モデルを生成した後でscaffoldを使用することにした場合は、いつでも実行できます。
$Rails generate scaffold <name>
不足しているすべてのファイルが作成されます。または、scaffoldの使用に満足できない場合は、次の方法でいつでも削除できます。
スキャフォールドを生成します:
$Rails generate scaffold Story
ファイルを移行した場合は、ロールバックを実行します。
$rake db:rollback
破壊または足場を元に戻す:$ Railsが足場を破壊するストーリー