2016-06-24 18 views
0

Ich habe 3 KlassenRails erhalten verschachtelte Attribut basiert in has_many Beziehung

Class User < ActiveRecord::Base 

has_many :dogs 

end 

Class Dog < ActiveRecord::Base 

belongs_to :user 
has_many :tags 

end 

class Tag < ActiveRecord::Base 
    belongs_to :dog 
end 

Ich habe versucht ausführen User.dogs und ich bekomme eine Liste von Hunde-Einheiten wie folgt aus:

[Dog, Dog, Dog, Dog] 

Wenn ich den Zugang zu eine Dog Entity im Array, bekomme ich alle Attribute von Dog und funktioniert gut. Aber mein Problem ist, dass ich Tag entity in Dog einschließen muss. wenn

von Beispiel ich das tun

user.dogs.each do |dog_entity| 
    puts dog_entity.tags #Prints the tags related value of Tag in Dog. 
end 

Wie erreicht, dass, wenn ich User.dogs der Tag bezogenen Wert zu Hund ausführen kommt innen in jedem Hund im Array?

Antwort

1

dogs ist die Assoziation, also sollten Sie es auf Objekt nicht auf Modell anrufen.

ich denke, das

user.dogs.includes(:tags).each do |dog| 
    puts dog.tags 
end 

Hinweis funktionieren sollte, dass user ist nicht Modell widersprechen.
includes(:tags) können wir vermeiden n + 1 Problem.

Bitte beachten Sie auch, dass das Modell singulären Namen haben sollte, d. H. Dog nicht Dogs.