我有一系列专辑,每张专辑都有歌曲。
我想过滤播放歌曲最多的所有专辑,并且在这些专辑中仅引用播放次数最多的歌曲。
就像是
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 个对象,我需要根据这个查询将它们变成专辑,包括他们的歌曲
我希望我解决了这个问题。