Rails对相关记录求和

时间:2012-07-17 02:15:05

标签: sql ruby-on-rails activerecord

我有一个调查模型就是这样的:

  

ResponseSets有很多回应
  答案属于答案
  答案模型有一个“值”列。

给定一个ResponseSet,我想要与每个Response相关联的Answers的总和。

即,我喜欢能够做到的事情,(在虚构的代码中)是:

response_set.responses.answers.sum('value')

然而,这显然不起作用,我需要通过response_set.responses建立一个查询,但我不知道如何。

在ActiveRecord中解决这个问题的SQL-fu方法是什么?

3 个答案:

答案 0 :(得分:0)

如果您使用的是Rails 3.2,您可以执行以下操作:

response_set.responses.answers.pluck(:value).inject{|sum,x| sum + x }

答案 1 :(得分:0)

答案是否为整数,在某种意义上,您希望找到与响应相关联的所有数字答案,并将它们全部添加起来?我认为你可以使用map并注入这样的东西,具体取决于你的模型/关联的设置方式。

response_set.responses.answers.map(:&value).inject(:+)

你可以张贴你的模特吗?

答案 2 :(得分:0)

经过多次试验和错误后,我想出了这个相对简单的解决方案,我希望这有助于将来的其他人:

response_set.responses.joins(:answer).sum('answers.value')

为了使这更方便,我只是在ResponseSet模型中创建了一个方法:

def total_value
  self.responses.joins(:answer).sum('answers.value')
end
相关问题