0

私は次のように機能する調査モデルを持っています:

ResponseSetには多くの応答があります
応答belong_to回答
回答モデルには「値」列があります。

ResponseSetが与えられた場合、各Responseに関連付けられている回答の合計が必要です。

つまり、(架空のコードで)私ができるようにしたいことは次のとおりです。

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

ただし、これは明らかに機能しません。クエリを作成する必要がありますがresponse_set.responses、方法がわかりません。

ActiveRecordでこれに取り組むSQL-fuの方法は何ですか?

4

3 に答える 3

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.answers.map(:&value).inject(:+)

モデルを投稿できますか?

于 2012-07-17T05:09:28.453 に答える
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 に答える