0

我是 Rails 的新手(最新版本 3.2),如果这是一个简单的问题,请原谅我。

我正在寻找建立艺术家-歌曲-专辑关系的模型。歌曲属于艺术家,专辑也属于艺术家。当然,艺人可以拥有多首歌曲和专辑,但每首歌曲和专辑只能属于一个艺人。一首歌可以选择成为专辑的一部分,也可以只是一首独立的歌曲。

主要是最后一部分让我绊倒。我想Artist应该has_many :songs, through: :albums,但协会的方向让我感到困惑。我不确定如何解释向另一个方向发展的关系,从可选SongAlbum关系,以及两者SongAlbumArtist.

有人可以帮助解决这个问题吗?谢谢!

4

1 回答 1

0

我认为艺术家应该直接拥有许多歌曲,因为艺术家可以拥有一首没有专辑的歌曲。您仍然可以通过以下方式通过专辑访问艺术家的歌曲:

@artist = Artist.find_by_name("Prince")
@artist.albums.find_by_name("Purple Rain").songs

或直接:

@artist.songs.find_by_name("When Doves Cry")

然后这可能是它们在模型中的关系:

class Artist < ActiveRecord::Base
  has_many :songs
  has_many :albums 

class Album < ActiveRecord::Base
  has_many :songs
  belongs_to :artist

class Song < ActiveRecord::Base
  belongs_to :artist
  belongs_to :album
end 

在另一个方向,你可以这样做:

@song.artist.name = "Prince"
@song.album.name = "Purple Rain"
于 2013-06-13T22:29:06.863 回答