1

我有以下协会

class Location < ActiveRecord::Base
   has_many :items
end

class Item < ActiveRecord::Base
   belongs_to :location
end

假设我有一些位置实例,我要查询的所有项目都属于这些位置。目前我设法将结果作为一个数组

items =[]
Location.near(latitude,longitude,distance).find_each do |location|
      location.items.find_each do |item|
           items << item
      end
end 

但是,有什么方法可以让我得到 ActiveRecord::Relation 的结果。因为我想通过在 ActiveRecord::Relation 中使用“where”来进一步查询结果。

PS“near”方法来自geocoder gem,它返回一个ActiveRecord::Relation。

- - - - - - - - - - -编辑 - - - - - - - - - - - - - -

感谢您的回复 我几乎找到了解决方案

locations = Location.near(latitude,longitude,distance)
Item.where(location_id: locations.pluck(:id))

这是正确的方法吗?对我来说,这有点不直观。

----------------------再次编辑 -------------- -

只是一个小评论:我说这是不直观的,因为我正在从 DataMapper 切换。如果是Datamapper,那就很简单了,比如

Location.near(blabla).items

通过关联进行查询非常简单。对比Datamapper,不明白为什么ActiveRecord关联这么没用?

4

1 回答 1

3

编辑以使用一个带有映射的查询...

比利上面所说的,但另一个可能更快的选择:

locations = Location.near(1, 2, 3)
items = Item.where(:location_id => locations.map(&:ids)
于 2013-07-31T18:16:32.467 回答