0

我的情景是,有几种不同的模型可以有评论。试图找出关系:评论belongs_to其中几个模型

Post 
    has_many :comments 

Update 
    has_many :comments 

Comment 
    belongs_to EITHER :post OR :update (but not both)???? 

什么是建立评论关系的正确方法?我希望能够调用Post.commentsUpdate.comments

回答

5

闻起来像一个polymorphic association

随着多态关联,模型可以属于一个以上的其他模式,在单一的关联。例如,您可能有一个属于员工模型或产品模型的图片模型。

所以,你会想是这样的:

class Comment < ActiveRecord::Base 
    belongs_to :commentable, :polymorphic => true 
end 

class Post < ActiveRecord::Base 
    has_many :comments, :as => :commentable 
end 

class Update < ActiveRecord::Base 
    has_many :comments, :as => :commentable 
end 

你不得不建立在数据库中的几件事情对这项工作为好。有关您需要的列的详细信息,请参阅Active Record Associations GuidePolymorphic Associations部分。

+1

+1像往常一样:-)谢谢你链接到费曼系列顺便说一句! – Tilo

+0

@Tilo:谢谢,RPF是我的英雄,[Sagan系列](http://www.youtube.com/watch?v=oY59wZdCDo0)也值得一试。 –

+0

斑点 - 正是它看起来像什么多态性创建 – brittohalloran