我有3个班级
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的所有属性并且工作正常。但我的问题是我需要在Dog中包含Tag实体。
例如,如果我这样做
user.dogs.each do |dog_entity|
puts dog_entity.tags #Prints the tags related value of Tag in Dog.
end
当我执行User.dogs
时,狗的标签相关值是否会进入数组中的每只狗?
答案 0 :(得分:1)
dogs
是关联,所以你应该在不在模型上的对象上调用它。
我认为这应该有用
user.dogs.includes(:tags).each do |dog|
puts dog.tags
end
请注意user
是对象而不是模型
includes(:tags)
允许我们避免 n + 1 问题。
另请注意,模型应具有单数名称,即Dog
而非Dogs
。