所以我有这四个课程:
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的集合。
答案 0 :(得分:0)
您只想在单个查询中获取所有关联的PlaceOfUseAreas
个对象,对吧?
如果是这样,Rails有很好的单行解决方案:
PlaceOfUseArea.joins(:water_wights).uniq
如果您想了解更多信息,请阅读更多about joins method。