有效地,基本模型的定义如下:
class Song
belongs_to :album
end
class Album
has_many :songs, dependent: :destroy
belongs_to :genre
end
现在我想找到genre_id = 10专辑中的所有歌曲,我怎么能这样做?
.songs
关联仅适用于单个相册对象。
答案 0 :(得分:1)
您可以使用has_many :through
关联。查看Rails Guides了解详情。
在您的情况下,您需要做的就是定义Genre
类,如下所示:
class Genre
has_many :albums
has_many :songs, through: :albums
end
然后,您可以在songs
对象上调用Genre
:
Genre.find(10).songs
如果你想在流派和歌曲之间有更多的那种关联,这里有一个解决方法:
class Genre
has_many :albums
has_many :artists
has_many :album_songs, through: :albums, source: :song
has_many :artist_songs, through: :artists, source: :song
end
这使您可以写:
Genre.find(10).album_songs
Genre.find(10).artist_songs
可能看起来有点奇怪,但是你可以给他们适当的名字。