<% @review.each do |review|%>
<% if review.host_id == @host.id>
<%= @user = User.find(review.user_id) %>
<% end %>
<% end %>
所以我有点困惑。我在这里发生了一些事情。我正在循环遍历主机的所有评论,然后检查存储的host.id值是否等于从控制器传递的活动@host对象的id。问题是..现在我需要从评论中存储的用户ID中获取用户对象,但是,我不确定如何做到这一点。我无法从控制器执行此操作,因为所有这些都是在循环中完成的。正如你所看到的,我尝试用上面的代码来做,但我非常怀疑我做得对。请帮我解决这个问题。感谢。
答案 0 :(得分:1)
您应该在控制器中预加载带有加载评论的用户。首先,您应该belongs_to
关联,如下所示:
class Review < ActiveRecord::Base
belongs_to :user
# ...
end
然后,在控制器中,您可以使用includes
,这样:
@reviews = Review.includes(:user)
现在,对于review
关系中的每个@reviews
记录,要获得关联用户,您可以调用user
方法,如下所示:
review.user
更重要的是,(以及使用includes
的优势)它不会为每个评论触发新的SQL查询,因此您可以避免使用N + 1 problem。
答案 1 :(得分:0)
你可以在
中建立关系class Review < ActiveRecord::Base
belongs_to :user
end
然后在视图中
review.user #gives you user
答案 2 :(得分:0)
在评论模型中放置关联
class Review < ActiveRecord::Base
.
.
.
belongs_to :user
.
.
.
end
放置关联后,您可以使用Review对象直接调用关联来查找用户对象。
review.user
但这会引发N + 1查询问题,因此更好的用户在查找评论时会包含用户,它只会执行两个查询,一个用于查找评论,另一个用于查找用户。
@reviews = Review.includes(:user)