0

ユーザーは多くの投稿を持つことができ、各投稿には多くのコメントを含めることができます。ユーザーのプロファイルにアクセスすると、ビューにそのようにレンダリングされた投稿のリストが表示されます。

<%= render @posts %>

また、次のようにして、各投稿のコメントをレンダリングしたいと思います。

<%= render @comments %>

しかし、どこで@commentsを宣言しますか?user#showで宣言すると、特定の投稿のコメントではなく、ユーザーのすべてのコメントが表示されます。

それで、コレクションがレンダリングされるとき、それは各インスタンスのコントローラーにアクセスしますか?もしそうなら、それはどのコントローラーメソッドを使用していますか?

4

1 に答える 1

2

投稿内の各投稿のコメントを部分的にレンダリングできます。

<% @posts.each do |post| %>
  <%= render post %>
  <%= render :partial => 'posts_comments', :collection => post.comments %>
<% end %>

これは、各ステートメントのコントローラーには送信されずpost.comments、DBに照会するだけです。

次の方法でコントローラーの@postsインスタンス変数を設定することにより、複数のクエリを削除することもできます。

@posts = @user.posts.includes(:comments)

次に、実行post.commentsするとDBにクエリを実行しませんが、メモリからコメントをロードします。

于 2012-09-02T18:23:47.607 に答える