rails,如何结合两个ActiveRecord查询结果

时间:2013-07-31 18:01:19

标签: ruby-on-rails ruby activerecord

我有以下关联

class Location < ActiveRecord::Base
   has_many :items
end

class Item < ActiveRecord::Base
   belongs_to :location
end

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

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”来进一步查询结果。

P.S。 “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关联如此无用?

1 个答案:

答案 0 :(得分:2)

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

比利上面说的是什么,但另一种可能更快的选择:

locations = Location.near(1, 2, 3)
items = Item.where(:location_id => locations.map(&:ids)