为每个用户设置唯一的标签

时间:2018-10-27 02:58:28

标签: ruby-on-rails activerecord

我正在尝试将标签添加到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

1 个答案:

答案 0 :(得分:0)

您不能同时拥有Package has_many :tagsTag has_many :packages。没错,应该改用has_and_belongs_to_manyhas_many through。它们之间的区别在于您要如何处理联接表。

如果唯一的目的是保持tagspackages之间的连接,则可以使用has_and_belongs_to_many

否则,如果您想在联接表中保留一些其他信息(例如包装的标签重量),则它可能是一个单独的模型;因此关联应为has_many through

另请参见this答案。

User模型的关联又如何:由于PackageTag都属于User,因此packagestags表都实现了这一点字段user_id中的关联。所以User has_many :packagesUser has_many :tags。没有其他选择。