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의 컬렉션을 가져 오는 쿼리를 만드는 방법을 찾고 있습니다.

답변

0

관련 검색어 모두를 개체로 가져 오시겠습니까? 좀 더 자세한 정보를 원하는 경우

PlaceOfUseArea.joins(:water_wights).uniq 

about joins method 더 읽기 :

그렇다면, 레일은 꽤 한 줄 해결책을 가지고 있습니다.

+0

네,하지만 특정 사용자의 물 권한에 대해서만 PlaceOfUseAreas를 받고 싶습니다. 'PlaceOfUseArea.joins (: water_rights) .where (water_rights : {user_id : User.first.id}). uniq' 그게 효과가있는 것 같아요? 또한 ID 열에'uniq'를 사용하는 방법이 있습니까? 이 오류를 던지고있는 것으로 보이는 JSON 열이 있습니다. PG :: UndefinedFunction : ERROR : json 유형의 항등 연산자를 식별 할 수 없습니다. – wheatbox

+0

'PlaceOfUseArea.joins (: water_rights) .where (water_rights : {user_id : user.id}). group ('place_of_use_areas.id') '라는 쿼리를 사용하여 필요한 정보를 얻었습니다. 저를 올바른 방향으로 가리켜 주셔서 감사합니다! – wheatbox

+0

당신을 환영합니다! 그리고 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