我有一个调查模型就是这样的:
ResponseSets有很多回应
答案属于答案
答案模型有一个“值”列。
给定一个ResponseSet,我想要与每个Response相关联的Answers的总和。
即,我喜欢能够做到的事情,(在虚构的代码中)是:
response_set.responses.answers.sum('value')
然而,这显然不起作用,我需要通过response_set.responses
建立一个查询,但我不知道如何。
在ActiveRecord中解决这个问题的SQL-fu方法是什么?
答案 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