Rails - 部分渲染收到错误的对象?

时间:2013-11-13 20:59:04

标签: ruby-on-rails ruby

我目前正在呈现这样的帖子列表:

<%= 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.当你传入帖子时,它会使用帖子,而不是之前获得的帖子。

你能解释一下这个问题吗?也许能为我提供解决方案吗? 谢谢!

1 个答案:

答案 0 :(得分:1)

当您找到主题时,可能应该包含帖子, Topic.find(params[:topic_id]).includes(:posts) 解决了n + 1查询问题