2016-06-24 5 views
0

У меня есть 3 классаRails получить вложенный атрибут, основанный в has_many отношении

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 

Я попытался выполнить User.dogs и получить список сущностей собак, как это:

[Dog, Dog, Dog, Dog] 

Если я получить доступ к объект Dog в массиве, я получаю все атрибуты Dog и отлично работает. Но моя проблема заключается в том, что мне нужно включить элемент тега внутри Dog.

К примеру, если я это сделать

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

Как достигается то, что, когда я исполняю User.dogs связанная с этим значением Tag Собаке приходят внутри каждой собаки в массиве?

ответ

1

dogs - это ассоциация, поэтому вы должны называть ее объектом не по модели.

Я думаю, что это должно работать

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

Обратите внимание, что user является объект не модель.
includes(:tags) позволяет избежать n + 1 проблема.

Также обратите внимание, что модель должна иметь сингулярное имя, то есть Dog не Dogs.

Смежные вопросы