Rails基于has_many关系获得嵌套属性

时间:2016-06-24 21:21:53

标签: ruby-on-rails ruby rails-activerecord has-many

我有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时,狗的标签相关值是否会进入数组中的每只狗?

1 个答案:

答案 0 :(得分:1)

dogs是关联,所以你应该在不在模型上的对象上调用它。

我认为这应该有用

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

请注意user是对象而不是模型 includes(:tags)允许我们避免 n + 1 问题。

另请注意,模型应具有单数名称,即Dog而非Dogs