Rails:查询以获取与集合关联的集合

时间:2014-12-08 05:54:31

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

所以我有这四个课程:

class User < ActiveRecord::Base
  has_many :water_rights
end

class WaterRight < ActiveRecord::Base
  belongs_to :user
  has_many :place_of_use_area_water_rights
  has_many :place_of_use_areas, through: :place_of_use_area_water_rights
end

class PlaceOfUseAreaWaterRight < ActiveRecord::Base
  belongs_to :place_of_use_area
  belongs_to :water_right
end

class PlaceOfUseArea < ActiveRecord::Base
  has_many :place_of_use_area_water_rights
  has_many :water_rights, through: :place_of_use_area_water_rights
end

我打电话给User.first.water_rights并获得WaterRights的集合。我的问题是如何在不做这样的事情的情况下获得与WaterRights相关的PlaceOfUseAreas集合:

areas = []
water_rights.each do |wr|
  areas << wr.place_of_use_areas
end
areas.flatten.uniq{ |a| a.id }

这可行,但它为每个WaterRight创建一个新查询。我正在寻找一种方法来进行一次查询以获取相关联的PlaceOfUseAreas的集合。

1 个答案:

答案 0 :(得分:0)

您只想在单个查询中获取所有关联的PlaceOfUseAreas个对象,对吧?

如果是这样,Rails有很好的单行解决方案:

PlaceOfUseArea.joins(:water_wights).uniq

如果您想了解更多信息,请阅读更多about joins method