web-dev-qa-db-ja.com

Rails)のスキャフォールドとモデルの違い

Railsでスキャフォールドを生成することとモデルを生成することの違いは何ですか?どちらかを行うことの長所/短所は何ですか?

26
jazzyfresh

モデルを生成すると、モデルといくつかの関連コンポーネントが取得されます。このようなトピックを説明する私のお気に入りの方法の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 FooRails generate Scaffold Foo name:string description:stringによって生成されたすべてのファイルを削除するので、実験によってプロジェクトを取り返しのつかないほど混乱させることを心配する必要はありません。

48
aceofbassgreg

スキャフォールドの生成には、モデルの生成が含まれますが、

  • RESTfulルート
  • モデルをRESTfulに処理するためのすべてのアクションを備えたコントローラー
  • コントローラに必要なビュー
  • スタブをテストします

スキャフォールディングは、新しいRailsユーザーにとって良いスタートです。

4
Martin M

$Rails generate scaffold <name>

完全なCRUD(作成、読み取り、更新、削除)Webインターフェースを使用して、すぐに使用できるコントローラー、モデル、およびビューを自動生成できます。モデルを生成するよりもはるかに簡単で高速ですが、生成するコードがアプリケーションに最適であるとは限りません。

scaffold は、簡単な例、簡単なモックアップ、またはテストの場合に使用するのに最適です。

気が変わって、モデルを生成した後でscaffoldを使用することにした場合は、いつでも実行できます。

$Rails generate scaffold <name>

不足しているすべてのファイルが作成されます。または、scaffoldの使用に満足できない場合は、次の方法でいつでも削除できます。

スキャフォールドを生成します:

$Rails generate scaffold Story

ファイルを移行した場合は、ロールバックを実行します。

$rake db:rollback

破壊または足場を元に戻す:$ Railsが足場を破壊するストーリー

1
Nesha Zoric