可以属于多个其他对象的对象的模型设计?

ric*_*pai 4 ruby-on-rails

我希望用3种类型的对象构建一个简单的应用程序:

  • 文章(RoR的第一天,为什么PHP仍然很棒,RoR与PHP)
  • 作者(Bob,Steve,Jen)
  • 标签(RoR,PHP)

作者撰写文章,并制作适当的标签.

所以:

author has many articles; article belongs to author
Run Code Online (Sandbox Code Playgroud)

但标签怎么样?我希望文章和作者都有标签.

我可以想象:

author has many tags; article has many tags
Run Code Online (Sandbox Code Playgroud)

但是标签模型上的声明怎么样?

tag belongs to authors; tag belongs to articles
Run Code Online (Sandbox Code Playgroud)

这两个人是否会相互干涉?

我担心的是标签需要作者和文章父母.并且在它具有两种类型的父项的情况下,由于数据库中的外键约束,删除一个将删除标记而另一个父项将删除.

提前致谢!

alo*_*ony 6

您正在寻找多态关联:

class Tag < ActiveRecord::Base
  belongs_to :taggable, :polymorphic => true
end

class Author < ActiveRecord::Base
  has_many :tags, :as => :taggable
end

class Article < ActiveRecord::Base
  has_many :tags, :as => :taggable
end
Run Code Online (Sandbox Code Playgroud)

  • 嗯,其实belongs_to不适合你,因为标签应该有很多文章(1个标签可以分配给不同的文章/作者),文章/作者可以有很多标签,对吗?如果是的话,可能更好的方法是使用[has_and_belongs_to_many association](http://guides.rubyonrails.org/association_basics.html#the-has_and_belongs_to_many-association) (2认同)