Я создаю приложение Rails для управления музыкой, и пользователи моего приложения смогут создавать упорядоченные списки воспроизведения альбомов, и каждый альбом будет иметь упорядоченный список песен.
По сути, это будетвыглядит так:
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
в таблицах песен и списков воспроизведения для управления порядком сортировки песен и списков воспроизведения соответственно.)
Теперь я хотел бы найти список всех песен (по порядку) для данного пользователя.Если я добавлю эту область в модель Song :
scope :for_user, lambda{|user|
joins(:album => {:playlists => :user}).
where(:'users.id' => user.id)
}
, я могу это сделать, но возвращенные записи не сохраняются в порядке.Вместо этого я хотел бы видеть каждую песню, упорядоченную сначала по позиции плейлиста в альбоме для пользователя, а затем по позиции песни в этом альбоме.Другими словами, если пользователь хочет воспроизводить альбомы A, B и C по порядку, я ищу массив всех песен из A (в порядке их расположения в альбоме), а также все песни из B(по порядку), плюс все песни из C (по порядку).
Я пробовал несколько перестановок предложений order и group в области видимости, нони один из них не имел желаемого эффекта при заказе песен в контексте заказа альбомов.