Ruby on rails 4 有没有更有效的方法来查找属于记录的内容?
鉴于这些模型:Ruby on rails 4 有没有更有效的方法来查找属于记录的内容?,ruby-on-rails-4,associations,Ruby On Rails 4,Associations,鉴于这些模型: Class Location < ActiveRecord::Base has_many :devices end 有没有比这更有效的方法。每个循环?在提问之前应该仔细考虑一下,但答案相当简单: locations = Location.near("some address") # using Geocoder :) location_ids = locations.map{|loc| loc.id}.join(',') # creates string of Loc
Class Location < ActiveRecord::Base
has_many :devices
end
有没有比这更有效的方法。每个循环?在提问之前应该仔细考虑一下,但答案相当简单:
locations = Location.near("some address") # using Geocoder :)
location_ids = locations.map{|loc| loc.id}.join(',') # creates string of Location ids: "1,3,5,6,7,12,..."
dev_list = Device.where("location_id IN (#{location_ids})")
根据1000个位置的列表进行测试。。每个
循环大约需要11秒(挂钟),这种方式几乎是瞬时的
请注意,在设备.where
语句中,我使用{location\u id}
而不是更安全的[“location\u id in(?)、location\u id]
。这是因为使用array condition语句将产生以下SQL(至少对于MySQL):
它仅查找位置_id为5565的设备
dev_list = []
locations = Location.near("some address") # using Geocoder :)
locations.each do |loc|
dev_list += loc.devices
end
locations = Location.near("some address") # using Geocoder :)
location_ids = locations.map{|loc| loc.id}.join(',') # creates string of Location ids: "1,3,5,6,7,12,..."
dev_list = Device.where("location_id IN (#{location_ids})")
SELECT `devices`.* FROM `devices` WHERE (location_id in ('5565,5098,2293'))