我正在尝试将标签添加到Package模型中,并且每个用户都应拥有自己创建的标签。
关系将如下:
Package
has_many :tags
belongs_to :user
User
has_many :packages
has_many :tags
Tag
has_many :packages
belongs_to :user
我应该使用什么关联?
我应该在标记和包装或has_and_belongs_to_many
上使用has_many_through
吗?
还是每个模型上只有has_many
?
答案 0 :(得分:0)
您不能同时拥有Package has_many :tags
和Tag has_many :packages
。没错,应该改用has_and_belongs_to_many
或has_many through
。它们之间的区别在于您要如何处理联接表。
如果唯一的目的是保持tags
和packages
之间的连接,则可以使用has_and_belongs_to_many
。
否则,如果您想在联接表中保留一些其他信息(例如包装的标签重量),则它可能是一个单独的模型;因此关联应为has_many through
另请参见this答案。
与User
模型的关联又如何:由于Package
和Tag
都属于User
,因此packages
和tags
表都实现了这一点字段user_id
中的关联。所以User has_many :packages
和User has_many :tags
。没有其他选择。