Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails与ActiveRecord有许多总和和计数_Ruby On Rails_Ruby On Rails 3_Activerecord - Fatal编程技术网

Ruby on rails Rails与ActiveRecord有许多总和和计数

Ruby on rails Rails与ActiveRecord有许多总和和计数,ruby-on-rails,ruby-on-rails-3,activerecord,Ruby On Rails,Ruby On Rails 3,Activerecord,我有一个进退两难的局面,我想我可能把自己编入了困境。这是设置 我的网站有很多用户。每个用户都有他们发布的故事集。每个故事都有来自其他用户的评论集 我想在用户页面上显示来自其他用户的评论总数 所以一个用户有很多故事,一个故事有很多评论 我尝试的是在@stories中加载所有用户的故事,然后显示@stories.comments.count,但当我尝试这样做时,会得到未定义的方法“comments”。有没有一种有效的ActiveRecord方法可以做到这一点?在控制器中,您应该有这样的功能(注意的使

我有一个进退两难的局面,我想我可能把自己编入了困境。这是设置

我的网站有很多用户。每个用户都有他们发布的故事集。每个故事都有来自其他用户的评论集

我想在用户页面上显示来自其他用户的评论总数

所以一个用户有很多故事,一个故事有很多评论


我尝试的是在@stories中加载所有用户的故事,然后显示@stories.comments.count,但当我尝试这样做时,会得到未定义的方法“comments”。有没有一种有效的ActiveRecord方法可以做到这一点?

在控制器中,您应该有这样的功能(注意
的使用包括
):

然后,在您的视图中,您可以执行以下操作来显示该特定用户的评论总数:

Total number of comments: <%= @stories.map{|story| story.comments.length}.sum %>
评论总数:
类用户
现在您应该能够获得
User.last.comments.count


我认为您需要对其进行进一步细化,以获得适当的标签。

快速解决方案是迭代@stories集合并将计数相加。不过,这不是一个纯粹的活动记录解决方案

totalComments = 0
@stories.each do |story|
    totalComments += story.count
end
对于纯活动记录解决方案,我需要假设每个关联都有多个对应的“属于”关联。所以一个用户有很多故事,一个故事属于一个用户。如果是这种情况,并且评论与故事有类似的关联,那么您可以按用户id搜索评论。类似于:

Comments.where("comment.story.user" => "userId")

我希望这会有所帮助。

这是一个很好的解决方案。
totalComments = 0
@stories.each do |story|
    totalComments += story.count
end
Comments.where("comment.story.user" => "userId")