查找特定类型的专辑中的所有歌曲?

时间:2013-04-26 08:35:54

标签: ruby-on-rails

有效地,基本模型的定义如下:

class Song    
  belongs_to :album  
end

class Album  
  has_many :songs, dependent: :destroy  
  belongs_to :genre  
end

现在我想找到genre_id = 10专辑中的所有歌曲,我怎么能这样做?

.songs关联仅适用于单个相册对象。

1 个答案:

答案 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
可能看起来有点奇怪,但是你可以给他们适当的名字。