我有一个两难的境地,我想我可能已将自己编入角落了。这是设置。
我的网站有用户。每个用户都有他们发布的故事集。每个故事都有其他用户的评论集。
我想在用户页面上显示其他用户的评论总数。
所以用户有很多故事,故事有很多评论。
我尝试的是在@stories中加载所有用户的故事然后显示@ stories.comments.count,但是当我尝试这样做时,我得到了未定义的方法'comments'。有没有一种有效的ActiveRecord方法来做到这一点?
答案 0 :(得分:2)
class User < ActiveRecord::Base
has_many :stories
has_many :comments, through: :stories
end
class Story < ActiveRecord::Base
belongs_to :user
has_many :comments
end
class Comment < ActiveRecord::Base
belongs_to :story
end
现在你应该能够获得User.last.comments.count
我认为你需要更多地改进它以获得适当的标签。
答案 1 :(得分:0)
在你的控制器中你应该有这样的东西(注意使用includes
):
@user = User.find( params[:id] )
@stories = @user.stories.includes(:comments)
然后在您的视图中,您可以执行以下操作,以显示该特定用户的评论总数:
Total number of comments: <%= @stories.map{|story| story.comments.length}.sum %>
答案 2 :(得分:0)
快速解决方案是迭代@stories集合并添加计数。但这不是一个纯粹的活跃记录解决方案。
totalComments = 0
@stories.each do |story|
totalComments += story.count
end
对于纯粹的活动记录解决方案,我需要假设每个has_many关联都有一个相应的belongs_to关联。因此,用户拥有故事和故事属于用户。如果是这种情况并且评论与故事具有类似的关联,那么您可以按user_id搜索评论。类似的东西:
Comments.where("comment.story.user" => "userId")
我希望有所帮助。