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