2012-03-27 12 views
0

Ich habe ein Tags-Modell, das ich gerne polymorph wäre, aber ich möchte nicht fünf Datensätze für ein Tag von "Video" zum Beispiel möchte ich das Tag erstellen und einmal sein in der Lage, es auf einer Vielzahl von Modellen zu verwenden. Ich habe einige der Fragen dazu gestellt, aber ich verstehe nicht, wie ich es zum Laufen bringen kann.Polymorphe has_many: durch in Schienen

So habe ich:

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

end 

und

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

end 

und

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

end 

scheint mir, dass funktionieren sollte, aber ... Lesen die alle questions hier I Ich weiß, ich brauche eine :source => Option irgendwo dort, um alles zusammen zu binden, aber ich bin nur nicht gefolgt exac wie es geht. Kann jemand helfen?

Antwort

3

Sie haben Ihre Modelle zu wiederholen, wie folgt:

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 

nun einen Beitrag gegeben Sie können ihre Tags erhalten wie folgt:

post.tags 

Hinweis

Sie berücksichtigen sollten mit das acts-as-taggable-on Juwel für Ihren Anwendungsfall.

+0

Okay, also die Zwischentabelle ist die polymorphe. Macht Sinn. – Slick23

Verwandte Themen