0

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

ResponseSets 有许多 Responses
Responses belongs_to Answer
答案模型有一个“值”列。

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

即,我希望能够做的(在虚构的代码中)是:

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

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

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

4

3 回答 3

0

答案是整数吗,从某​​种意义上说,您要查找与响应相关的所有数字答案并将它们全部加起来?我认为您可以使用 map 并注入类似的东西,这完全取决于您的模型/关联的设置方式。

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

你能发布你的模型吗?

于 2012-07-17T05:09:28.453 回答
0

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

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

于 2012-07-17T03:57:56.560 回答
0

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

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

为了使这更方便,我只是在ResponseSet模型中将此方法设为:

def total_value
  self.responses.joins(:answer).sum('answers.value')
end
于 2012-07-18T19:48:05.890 回答