1

私は現在Railsガイドに取り組んでおり、コントローラーとスキャフォールドについて混乱しています。ガイドでは、2つのコマンドを見ました。

$ rails generate controller home index
$ rails generate scaffold Post name:string title:string content:text

最初の行は、アクションインデックスを使用してホームコントローラーを作成することを意味します。しかし、ここでの実際的な意味はよくわかりません。単に「ホーム/インデックス」というアドレスのページをレンダリングするという意味ですか?

2行目では、名前、タイトル、コンテンツの3つのパラメーターを持つPostというアプリを作成していることがわかります。それが正しいかどうかはわかりませんが、足場が実際に何を意味するのか疑問に思っています。ガイドの説明は私には少し曖昧です。

ありがとう。

4

2 に答える 2

1

したがって、最初に、それらを実行する必要があります。彼らは彼らが作成したファイルをリストし、あなたはそれらを見ることができます。

1つ目は、という名前の1つのアクションを使用して、という名前のコントローラーhome(Web要求に応答するためのコードの一部)を作成しますindex。アクションは、ant HTTP動詞と/home/indexコントローラーのメソッドに対応するURL(この場合はGET)の組み合わせです。ジェネレーターは、そのアクションをレンダリングするためのダミービューと、いくつかの空のテストファイルとヘルパーファイルも作成します。あなたはそれが印刷するものでそれを見ることができます:

  create  app/controllers/home_controller.rb
   route  get "home/index"
  invoke  erb
  create    app/views/home
  create    app/views/home/index.html.erb
  invoke  test_unit
  create    test/functional/home_controller_test.rb
  invoke  helper
  create    app/helpers/home_helper.rb
  invoke    test_unit
  create      test/unit/helpers/home_helper_test.rb
  invoke  assets
  invoke    coffee
  create      app/assets/javascripts/home.js.coffee
  invoke    scss
  create      app/assets/stylesheets/home.css.scss

特に便利なのはコントローラーです。

class HomeController < ApplicationController
  def index
  end
end

Railsにそのアクションで何をさせたいかについての情報を与えていないので(「「インデックス」と呼ばれるアクションで「ホーム」と呼ばれるコントローラーを作成する」と言っただけです)、そのメソッドに入力するのはあなた次第です。そして、あなたは呼び出すことによってURL情報を見ることができますrake routes

home_index GET /home/index(.:format) home#index

つまり、GETリクエストを送信する/home/indexと、が呼び出されますHomeController#index。このメソッドは空であり、Railsに何をレンダリングするかを指示しないため、デフォルトでビューをでレンダリングしますapp/views/home/index.html.erb。これもジェネレーターが作成し、何か面白いことをすることを期待しています。

2番目のジェネレーターはさらに多くのことを行います。リソースを作成します。これは、データベースに保存するモデルと、そのモデルを操作するための単純なCRUDアクションとダミービューを備えたコントローラーを意味します。したがって、上記のコントローラー/ビューのものに加えて、DBに適切なテーブルを作成するためのアップグレードスクリプトと、モデルとして機能するRubyクラスも作成します。ここで特に最初の2つの「作成」アイテムを見て、エディターにロードします。

  invoke  active_record
  create    db/migrate/20130111151206_create_posts.rb
  create    app/models/post.rb
  invoke    test_unit
  create      test/unit/post_test.rb
  create      test/fixtures/posts.yml
  invoke  resource_route
   route    resources :posts
  invoke  scaffold_controller
  create    app/controllers/posts_controller.rb
  invoke    erb
  create      app/views/posts
  create      app/views/posts/index.html.erb
  create      app/views/posts/edit.html.erb
  create      app/views/posts/show.html.erb
  create      app/views/posts/new.html.erb
  create      app/views/posts/_form.html.erb
  invoke    test_unit
  create      test/functional/posts_controller_test.rb
  invoke    helper
  create      app/helpers/posts_helper.rb
  invoke      test_unit
  create        test/unit/helpers/posts_helper_test.rb
  invoke  assets
  invoke    coffee
  create      app/assets/javascripts/posts.js.coffee
  invoke    scss
  create      app/assets/stylesheets/posts.css.scss
  invoke  scss
  create    app/assets/stylesheets/scaffolds.css.scss

もう一度実行すると、実際に実行できるすべてのアクションを確認できますrake routes

     posts GET    /posts(.:format)          posts#index
           POST   /posts(.:format)          posts#create
  new_post GET    /posts/new(.:format)      posts#new
 edit_post GET    /posts/:id/edit(.:format) posts#edit
      post GET    /posts/:id(.:format)      posts#show
           PUT    /posts/:id(.:format)      posts#update
           DELETE /posts/:id(.:format)      posts#destroy

最後に、でコントローラーコードをチェックして、app/controllers/PostsController.rbこれらのアクションが実際に何をするかを確認します(もう少し興味深いです)。

于 2013-01-11T15:16:08.830 に答える
1

1行目は、2つのアクション(およびそれらのビュー)を含むコントローラーを作成します。しかし、モデルはありません。

2行目はリソースを作成します。リソースには、そのコントローラーで事前定義されたデフォルトのRESTアクション(作成、削除、更新など)があります。対応するビューも作成されます。リソースは、指定されたパラメーター(name:datatype_in_sql)を使用して、新しいモデル(その移行を含む)も作成します。

于 2013-01-11T15:08:09.043 に答える