2013-10-15 97 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

嘗試使用Rails控制檯中的代碼並檢查正在執行的查詢數量。我會認爲這將是兩個疑問。 –