0
과 관련된 얻을 그래서 나는이 네 가지 클래스가 있습니다레일 : 쿼리가 컬렉션 수집
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의 컬렉션을 가져 오는 쿼리를 만드는 방법을 찾고 있습니다.
네,하지만 특정 사용자의 물 권한에 대해서만 PlaceOfUseAreas를 받고 싶습니다. 'PlaceOfUseArea.joins (: water_rights) .where (water_rights : {user_id : User.first.id}). uniq' 그게 효과가있는 것 같아요? 또한 ID 열에'uniq'를 사용하는 방법이 있습니까? 이 오류를 던지고있는 것으로 보이는 JSON 열이 있습니다. PG :: UndefinedFunction : ERROR : json 유형의 항등 연산자를 식별 할 수 없습니다. – wheatbox
'PlaceOfUseArea.joins (: water_rights) .where (water_rights : {user_id : user.id}). group ('place_of_use_areas.id') '라는 쿼리를 사용하여 필요한 정보를 얻었습니다. 저를 올바른 방향으로 가리켜 주셔서 감사합니다! – wheatbox
당신을 환영합니다! 그리고 uniq에 대한 또 하나의 팁 :'& block'을 사용할 수 있습니다. 예를 들면 다음과 같습니다.'PlaceOfUseArea.joins (: water_wights) .uniq {| result | result.id}'. [공식 문서] (http://www.ruby-doc.org/core-2.1.5/Array.html#method-i-uniq)에서 더 읽을 수 있습니다 – goodniceweb