我正在構建一個音樂管理Rails應用程序,我的應用程序的用戶將能夠製作專輯的有序播放列表,並且每個專輯都會有一個有序的歌曲列表。如何使用ActiveRecord對深層嵌套集合進行排序?
在本質上,這將是這樣的:
class User < ActiveRecord::Base
has_many :playlists, :order => "position"
has_many :albums, :through => :playlists
end
class Playlist < ActiveRecord::Base
belongs_to :user
belongs_to :album
end
class Album < ActiveRecord::Base
has_many :songs, :order => "position"
has_many :playlists
end
class Song < ActiveRecord::Base
belongs_to :album
end
(我使用acts_as_list
使用的歌曲和播放列表表一position
列來管理歌曲和播放列表的排序順序,分別。)
現在我想查找給定用戶的所有歌曲(按順序)的列表。如果我這個範圍內添加到宋型號:
scope :for_user, lambda{|user|
joins(:album => {:playlists => :user}).
where(:'users.id' => user.id)
}
我可以做到這一點,但返回的記錄沒有保持秩序。相反,我希望看到每首歌曲首先按專輯的播放列表位置排序,然後按該歌曲在該專輯中的位置排序。換句話說,如果用戶想按順序播放專輯A,B和C,我正在查找來自A的所有歌曲(按照他們在專輯中的順序)以及來自B的所有歌曲(按順序),加上C中的所有歌曲(按順序)。
我試過的爲了和組條款的範圍若干排列,但沒有已訂購專輯的範圍內訂購歌曲的預期效果。