チュートリアルを開始するRORのガイドに従って、config /routes.rbファイルに次の関連付けがある2つのモデル(投稿とコメント)を持つブログを作成しています。
resources :posts do
resources :comments
end
view/posts/show.html.erb
そのため、コメントとコメントフォームは、表示上の理由でブログのページに表示されます。@post, @post.comments.build
ただし、次のコードスニペットで何が意味するのかを理解するのに行き詰まっています。
<h2>Add a comment:</h2>
<%= form_for([@post, @post.comments.build]) do |f| %>
<div class="field">
<%= f.label :commenter %><br />
<%= f.text_field :commenter %>
</div>
<div class="field">
<%= f.label :body %><br />
<%= f.text_area :body %>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
また、リファクタリング中に、作成者はコメントを表示するコードをview/comments/_comment.html.erb
パーシャルに移動し、それをview/posts/show.html.erb
使用してレンダリングしました
<%= render @post.comments %>
これによりapp/views/comments/_comment.html.erb
、コレクション内のコメントごとにパーシャルインが1回レンダリングされ@post.comments
ます。renderメソッドは@post.comments
コレクションを反復処理するときに、各コメントをパーシャルと同じ名前のローカル変数に割り当てます。この場合、コメントはパーシャルで表示できるようになります。
Q:railsは、上記のコード行からコメントを表示するために、パーシャル名とパーシャルに渡される変数をどのように推測しますか?
また、上記のブログアプリケーションに関して、次のステートメントが何を意味するのか説明していただけますか。参照:http://guides.rubyonrails.org/getting_started.html
The @post object is available to any partials rendered in the view because we defined it as an instance variable.