アルバムのコレクションがあり、各アルバムには曲があります。
最も再生された曲があり、これらのアルバム内で最も再生された曲のみを参照しているすべてのアルバムをフィルター処理したいと考えています。
何かのようなもの
Album.includes(:songs).order("songs.played_count DESC").limit(10)
ただし、これは曲ではなくアルバムを制限します。
そのためには、最も再生された曲とアルバムを 10 個欲しいです。
のような反対側から行く場合
Song.includes(:album).order("songs.played_count DESC").limit(10)
すべての曲を入手しましたが、アルバムを受け取りたいです。この例では、曲を調べてアルバムのコレクションを作成し、各アルバム セットに対して選択した曲のみを設定する必要があります。
それを達成するためのより良い方法はありますか?
マイモデル
Artist
name
has_many :albums
Album
title
year
has_many :songs
belongs_to :artist
Song
title
played_count
new
belongs_to :album
アップデート
私が期待する結果の例。
トップ10曲
Bad Religion - The New America | I Love My Computer
Linkin Park - Living Things | Caste of Glass
Linkin Park - Living Things | Skin to Bone
Kiss - Monster | Freak
Within Tempt. - Q Music Session | Titanium
Sunrise Avanue - On The Way .. | Fairytale Gone Bad
Linkin Park - Living Things | Roads Untravelled
Within Tempt. - Q Music Session | Radioactive
期待される結果
Album <Bad Religion - The New America>
Song <I Love My Computer>
Album <Linkin Park - Living Things>
Song <Castle of Glass>
Song <Skin to Bone>
Song <Roads Untravelled>
Album <Kiss - Monster>
Song <Freak>
Album <Within Tempt. - Q Music Session>
Song <Titanium>
Song <Radioactive>
Album <Sunrise Avanue - On The Way ..>
Song <Fairytable Gone Bad>
簡単なクエリは次のようになります
SELECT albums.*, songs.* FROM albums
LEFT JOIN songs
ON songs.album_id = albums.id
ORDER BY songs.most_played
LIMIT 10
そして、このクエリは 10 個のオブジェクトを返します。このクエリに基づいて、それらを曲を含むアルバムに変換する必要があります。
質問をクリアしたことを願っています。