2012-03-27 72 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