2013-10-15 71 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控制台中的代码并检查正在执行的查询数量。我会认为这将是两个疑问。 –