2013-10-15 2 views
0

두 모델 : ProductLocation이 있습니다. 나는 지오 코더 보석을 사용하는 경우개체 컬렉션의 중첩 개체 추출 (위치의 제품)

class Location 
    has_many :products 
end 

class Product 
    belongs_to :location 
end 

, 나는 나 특정 주소 주변의 모든 위치를 선택할 수 있도록 가까운 범위를 사용할 수 있습니다.

@locations_near_paris = Location.near("Paris") 

지금, 나는 @locations_near_paris 컬렉션을 사용, 파리에서 가까운 제품의 컬렉션을 만들고 싶어 :처럼 뭔가. 어떻게해야합니까?

나는 다음과 같은했지만 나는

close_locations.each do |l| 
    unless l.products.nil? 
    l.products.each do |p| 
     close_products << p 
    end 
    end 
end 

답변

1

내가 지오 코더 방법은 AR을 반환하는 경우 알아,하지만의이 그렇지 않은 가정하자하지 않습니다 ... 그것은 좋은 방법이 아닙니다 느낀다.

location_ids = Location.near("Paris").collect do |location| 
    location.id 
end 

paris_products = Product.where(location_id: location_ids) 
+0

그래도 작동하지만 데이터베이스 요청이 효율적인지는 알고 있습니까? –

+0

효율적이어야합니다. 특히 제품 테이블의 location_id 열에 색인을 추가 한 경우 –

+0

레일스 콘솔에서 코드를 실행하여 수행중인 쿼리 수를 확인하십시오. 나는 그것이 두 가지 질문 일 것이라고 생각할 것이다. –