我导入了一个包含10000个位置的.csv文件,我需要通过几个字段而不是通常的"geocode_by:address"在数据库和地理代码中循环
我正在使用地理编码宝石。
我的数据库方案看起来像这个
create_table "locations", :force => true do |t|
t.string "Address"
t.string "City"
t.string "State"
t.string "Zip"
t.float "latitude"
t.float "longitude"
t.datetime "created_at"
t.datetime "updated_at"
end
我可以在控制器操作中而不是在验证中执行此操作吗?我应该这样做吗:
def index
@locations = Location.all
@locations.each do |l|
new_address = "#{l.Address} #{l.City} #{l.State}"
geocode_by = :new_address
end
end
但是,是的,我们非常感谢您的帮助,谢谢!
我能够用这个控制器代码来工作:
def index
if params[:search].present?
@locations = Location.near(params[:search], 20, :order => :distance)
else
@locations = Location.all
@locations.each do |l|
if l.latitude.nil?
new_location = "#{l.HP_Address_1} #{l.HP_City} #{l.HP_State}"
s = Geocoder.search(new_location)
l.latitude = s[0].latitude
l.longitude = s[0].longitude
l.save
end
end
end
end
它循环遍历数据库中的每个条目,如果纬度和经度值尚未编码,它会调用正确的地理编码函数,并将返回的纬度/经度值存储在数据库中。
我的数据库中有9k个条目,所以由于谷歌地图api的限制,我每天只能编码2k个条目。但对于那些习惯于在模型中使用geocoded_by
对创建过程中的条目进行编码的人来说,这将在控制器中起作用。
这是我对工人(延迟工作或重新工作)会做的事情,因为这可能需要一些时间才能完成。但我不确定我是否理解这个问题,所以这可能不是你所期望的那种答案。
如果您想处理类中的每一条记录,就有一个rake任务。
rake地理编码:all CLASS=YourModel sleep=0.25