2012-03-27 98 views
0

我有一个标签模型,我想是多态的,但我不想要五个记录的“视频”标签例如,我想要创建标签一次,是能够在多种型号上使用它。我已经准备好了一些关于这样做的问题,但我还没有完全弄清楚如何使其工作。多态has_many:通过导轨

所以我有:

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

end 

class Post < ActiveRecord::Base 
    has_many :tags, :through => :tag_assignments 

end 

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

end 

在我看来,应该工作,但是...阅读完所有的questions我在这里知道我需要一个:source =>选项在那里把它们结合在一起,但我只是没有遵循exac如何做到这一点。谁能帮忙?

回答

3

你必须重做你的模型如下:

class Tag < ActiveRecord::Base 
    has_many :tag_assignments 
end 

class TagAssignment < ActiveRecord::Base 
    belongs_to :tagable, :polymorphic => true 
    belongs_to :tag 
end 

class Post < ActiveRecord::Base 
    has_many :tag_assignments, :as => :tagable 
    has_many :tags, :through => :tag_assignments 
end 

现在给出一个帖子,你可以得到它的标签如下:

post.tags 

注意

您应该考虑使用acts-as-taggable-on宝石为您的用例。

+0

好的,所以中间表是多态的。说得通。 – Slick23 2012-03-27 17:55:26