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语句上发送到控制器,它只是查询数据库。

您还可以通过以下方式在控制器中设置 @posts 实例变量来消除多个查询:

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

然后当你这样做时,post.comments它不会查询数据库,而是从内存中加载评论。

于 2012-09-02T18:23:47.607 回答