user モデルが has_many: points をもっていて
ユーザごとに point モデルがもっている point 値の合計をソートしてランキングしたいです
とりあえずランクをつけるところは後回しでまずはユーザごとのポイント合計をソートして出力したいんですが
集計する point に特定期間という条件をつけたときに
users.includes(:points) .where(points: {created_at: term_since..term_until}) .group('users.id') .order('point desc') .sum(:point) .each do |k, v| p "#{k} #{v}" end
とかいたところ where の期間にデータがないとユーザレコードごと削除されてしまいます
期間内に point レコードがない場合もスコア 0 として出力したいので
先に points のテーブルをしぼってから includes したくて以下のようにかいたところ
users.includes(Point.where(created_at: term_since..term_until)) .group('users.id') .order('point desc') .sum(:point) .each do |k, r| p "#{k} #{r}" end
ActiveRecord::ConfigurationError: #<Point ...
というエラーになります
こういう場合どうすれば includes 先にデータがない場合も sum の値を 0 として取り出せるでしょうか
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/12/04 05:19
退会済みユーザー
2018/12/04 06:34