我有一系列专辑,每张专辑都有歌曲。
我想过滤所有播放歌曲最多的专辑,而这些专辑内部只能播放播放次数最多的歌曲。
像
这样的东西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
的更新 的
我期望的结果示例。
十大歌曲
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个对象,我需要根据此查询将其转换为包含其歌曲的专辑
我希望我能解决这个问题。
答案 0 :(得分:1)
来自Rails Doc:
如果您急切加载与指定的:limit选项的关联,它将被忽略,返回所有关联的对象。
相反,试试这个:
Album
title
year
has_many :songs
has_many :most_played_songs, -> { order('played_count DESC').limit(10) }, :class_name => 'Song'
belongs_to :artist