我有以下关联
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关联如此无用?
答案 0 :(得分:2)
比利上面说的是什么,但另一种可能更快的选择:
locations = Location.near(1, 2, 3)
items = Item.where(:location_id => locations.map(&:ids)