我試圖將每個播放列表的第一首歌曲加入播放列表陣列,並且在尋找有效解決方案時遇到了相當困難的時間。從一個有很多通過協會獲得第一個協會
我有以下型號:
class Playlist < ActiveRecord::Base
belongs_to :user
has_many :playlist_songs
has_many :songs, :through => :playlist_songs
end
class PlaylistSong < ActiveRecord::Base
belongs_to :playlist
belongs_to :song
end
class Song < ActiveRecord::Base
has_many :playlist_songs
has_many :playlists, :through => :playlist_songs
end
我希望得到這樣的:
playlist_name | song_name
----------------------------
chill | baby
fun | bffs
我有一個非常艱難的時間找到一個有效的方法通過加入做到這一點。
UPDATE * ***
巴蒂爾安德拉德已經導致我在正確的方向,但我還是不能讓正是我想要的。
這是據我已經能夠得到:
playlists = Playlist.where('id in (1,2,3)')
playlists.joins(:playlist_songs)
.group('playlists.id')
.select('MIN(songs.id) as song_id, playlists.name as playlist_name')
這給了我:
playlist_name | song_id
---------------------------
chill | 1
這是接近,但我需要的第一首歌曲(根據ID)的名字。
想要加入每首歌曲的播放列表是什麼?包含這首歌曲的所有播放列表? – Leito 2013-03-08 19:46:43
您是否嘗試搜索具有給定名稱和給定歌曲的所有播放列表,或者是否只想輸出第一首歌曲旁邊所有playlist_name的數組? – 2013-03-08 19:50:44
@rocketscientist後來。他們的第一首歌曲旁邊的playlist_names – mrabin 2013-03-08 20:08:39