我想弄清楚为Playlist
和Song
设置模型的逻辑。
到目前为止,我有:
User has_many :playlists, has_many :songs
Playlist belongs_to :user, has_many :songs
Song belongs_to :user
我不确定如何关联一首歌可以属于许多播放列表。
我是否要设置has_and_belongs_to_many :playlists
并设置连接表,还是应该进行has_many :through
关联?
您是否可以仅针对一个型号进行HABTM关联,还是必须在您关联的两个型号上进行声明?在has_and_belongs_to_many :songs
模型上建立Playlist
关联是不对的。
User
和Song
之间的关系很好,我只是想实现Playlist
。当然,一首歌不必属于播放列表。
答案 0 :(得分:3)
通常会有一个具有以下结构的表:
unique_id song_id playlist_id
这允许任意数量的歌曲属于任意数量的播放列表。 unique_id仅适用于新表中的行。
答案 1 :(得分:2)
虽然HABTM完全可以工作但我认为你会想要使用has_many:through因为你很可能想要在列表/歌曲关系模型中添加一些额外的信息。例如,歌曲位置。
类似的东西:
List
belongs_to :user
has_many :relationships
has_many :songs, :through => relationships
Song
belongs_to :user
has_many :relationships
has_many lists, :through => :relationships
Relationship
belongs_to :song
belongs_to :list
答案 2 :(得分:0)
这个怎么样。
User:
has_many :lists
has_many :songs
List:
belongs_to :user
has_and_belongs_to_many :songs
Song
belongs_to :user
has_and_belongs_to_many :lists