如何汇总嵌套集合的所有属性?

时间:2011-03-08 14:40:06

标签: ruby-on-rails ruby ruby-on-rails-3

鉴于我将User.attachments和Attachment.visits作为具有数字计数的整数。

如何轻松统计该用户所有图片的所有访问次数?

4 个答案:

答案 0 :(得分:18)

使用ActiveRecord::Base#sum

user.attachments.sum(:visits)

这应该生成一个有效的SQL查询,如下所示:

SELECT SUM(attachments.visits) FROM attachments WHERE attachments.user_id = ID

答案 1 :(得分:14)

user.attachments.map{|a| a.visits}.sum

答案 2 :(得分:5)

还有inject

user.attachments.inject(0) { |sum, a| sum + a.visits }

人们通常(并且非常正确地)讨厌inject,但由于已经提到了实现这一目标的另外两种主要方式,我想我也可以把它扔出去。 :)

答案 3 :(得分:2)

以下适用于普通旧Ruby对象,我怀疑以下内容比使用count += a.visits略快,而且还有一个表情符号:

user.attachments.map(&:visits).inject(:+)