Sql 关联记录上的总和

Sql 关联记录上的总和,sql,ruby-on-rails,activerecord,Sql,Ruby On Rails,Activerecord,我有一个这样工作的调查模型: 响应集有许多响应 回答属于回答 答案模型有一个“值”列 给定一个响应集,我想要与每个响应相关联的答案的总和 也就是说,我想做的是(在想象代码中): 然而,这显然不起作用,我需要通过response\u set.responses构建一个查询,但我不知道如何进行 在ActiveRecord中,SQL fu解决这个问题的方法是什么?如果您使用的是Rails 3.2,您可以执行以下操作: response\u set.responses.answers.pull(:val

我有一个这样工作的调查模型:

响应集有许多响应
回答属于回答
答案模型有一个“值”列

给定一个响应集,我想要与每个响应相关联的答案的总和

也就是说,我想做的是(在想象代码中):

然而,这显然不起作用,我需要通过
response\u set.responses
构建一个查询,但我不知道如何进行


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

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


response\u set.responses.answers.pull(:value).injection{sum,x | sum+x}

是答案整数,从某种意义上说,您希望找到与响应关联的所有数字答案,并将它们全部相加?我认为您可以使用map和inject实现类似的功能,具体取决于您的模型/关联的设置方式

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

你能发布你的模型吗?

经过反复尝试,我想出了这个相对简单的解决方案,我希望这对以后的其他人有所帮助:

response_set.responses.joins(:answer).sum('answers.value')
为了方便起见,我刚刚在
ResponseSet
模型中使用了此方法:

def total_value
  self.responses.joins(:answer).sum('answers.value')
end

考虑到OP中的关系,不确定您是否可以按照上面的建议执行“…响应。答案…”。您是对的。您可以在ResponseSet模型中编写一个“answers”方法,该方法返回基于响应的答案数组,然后将公式应用于该数组。像
response\u set.answers.pull(:value).injection{| sum,x | sum+x}
这是我能想到的唯一方法。
def total_value
  self.responses.joins(:answer).sum('answers.value')
end