Railsのscaffoldとmodelの違い 質問する

Railsのscaffoldとmodelの違い 質問する

Rails でスキャフォールドを生成することとモデルを生成することの違いは何ですか? どちらを実行する場合の利点と欠点は何ですか?

ベストアンサー1

モデルを生成すると、モデルといくつかの関連コンポーネントが取得されます。このようなトピックを説明するときに私がよく使う方法の 1 つは、実際に試してみるか、他の人に試してみるように勧めることです。そのため、rails generate model Foo name:string description:textRails プロジェクト内でコマンドを入力すると、次のようになります。

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」の列も作成します。

次の行はモデル自体を作成します。モデルは基本的に Active Record から継承された Ruby クラスです。つまり、Active Record で呼び出せるメソッドはすべてモデルで呼び出せるようになります。最後の 3 行は基本的にモデルに関連するテスト ファイルを作成します。RSpec を使用している場合は、代わりに spec ファイルが作成されます。

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。そのため、実験によってプロジェクトが取り返しのつかないほど台無しになる心配はありません。

おすすめ記事