ActiveRecord中可选的多对多关系

时间:2013-06-13 22:07:31

标签: ruby-on-rails activerecord orm

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

我希望模仿艺术家 - 歌曲 - 专辑的关系。歌曲属于艺术家,专辑也属于艺术家。当然,艺术家可以拥有多首歌曲和专辑,但每首歌曲和专辑只能属于一位艺术家。一首歌可以选择是专辑的一部分,也可以只是一首独立歌曲。

这主要是最后一部分让我感到沮丧。我认为Artisthas_many :songs, through: :albums,但协会的方向让我感到困惑。我不确定如何解释从另一个方向发展的关系,从可选的SongAlbum关系,以及SongAlbum到{{1 }}。

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

1 个答案:

答案 0 :(得分: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"