我目前正在呈现这样的帖子列表:
<%= render partial: "layouts/modules/forums/posts/post", collection: @topic.posts %>
这很好用。但是,在_post.html.erb中,我调用了
<%= render partial: "layouts/users/name", user: post.user %>
这会呈现名称,但它有点重用它获得的第一个对象。为了帮助解释,我添加了一些调试:
_post.html.erb中的 <% puts("_post user: "+post.user.name) %>
和_name erb中的类似信息。 (_post puts在_name渲染之前)。
这是结果:
_name user: User1
_post user: User1
_name user: User1
_post user: User2
_name user: User1
为什么这样做?你会期望1. _post出现在_name之前,然后是2.当你传入帖子时,它会使用帖子,而不是之前获得的帖子。
你能解释一下这个问题吗?也许能为我提供解决方案吗? 谢谢!
答案 0 :(得分:1)
当您找到主题时,可能应该包含帖子,
Topic.find(params[:topic_id]).includes(:posts)
解决了n + 1查询问题