假设我们在rails中有专辑,艺术家和歌曲模型。
在专辑中:
class Album < ActiveRecord::Base
has_many :artist_album
has_many :artist, :through => :artist_album
has_many :song
在artistalbum中:
class ArtistAlbum < ActiveRecord::Base
belongs_to :album
belongs_to :artist
end
歌曲中:
class Song < ActiveRecord::Base
has_many :artist_song
has_many :artists, :through => :artist_song
belongs_to :album
艺术家:
class Artist < ActiveRecord::Base
has_many :artist_song
has_many :song, :through => :artist_song
是否可以使用活动记录选择以下记录集:
由于艺术家与歌曲相关,而专辑只是一组歌曲,而且艺术家与专辑没有直接关系。
同样选择每首歌曲属于相关艺术家的每张专辑
本质上就是这个效果:
SELECT albums.`name`
FROM artists INNER JOIN artist_songs ON artists.id = artist_songs.artist_id
INNER JOIN songs ON songs.id = artist_songs.song_id
INNER JOIN albums ON songs.album_id = albums.id
答案 0 :(得分:0)
您是否错过了ArtistSong
型号?通常我们在has_many
中使用复数形式,即has_many :artist_songs
。
如果您拥有ArtistAlbum
加入模式,则无需转到Song
部分...如果您进行了以下设置,则只需artist.albums
:
class Artist < ActiveRecord::Base
has_many :artist_albums
has_many :albums, :through => :artist_albums
end
以下是您可以使用的内容,但不一定是必需的。
class ArtistAlbum < ActiveRecord::Base
belongs_to :artist
belongs_to :album
end
class Album < ActiveRecord::Base
has_many :artist_albums
has_many :artist, :through => :artist_albums
end