User
モデルです。has_one
Picture
(carrierwave
バックエンド)とhas_many
journal
sです。1つのActiveRecordクエリにグループ化、合計、インクルードする方法は?
最大スコア(score
フィールドの合計はJournal
モデル)の上位Nユーザーを取得する必要があります。
私はそれは私がUser.top.picture
でPicture
を取得しようとしたとき、私は、データベースへの追加の要求を取得し、動作しますが、
scope :top, lambda { |n=10|
joins(:picture, :journals)
.select("users.*, pictures.image, sum(journals.score) as total_score")
.order("total_score desc ")
.group("users.id", "pictures.image")
.limit(n)
}
このスコープを書きました。
スコープのI include(:picture)
フィールドの場合、total_score
フィールドが暴走します。
このクエリはどのように修正できますか?あなたがこのトピックについてアドバイスできるなら、私は非常に満足しています。
具体的にお答えください。どこでデータベースを追加呼び出ししていますか? –
私は質問を更新しました。ピクチャモデルをキャッシュできないので、 'User.top.picture'を実行すると追加のクエリが出ます。 –