我正在尝试使用geocoder gem但在使用反向地理编码时感到困惑。
我有"地区"模型与字段 - 国家,州,城市和邮政编码。
如果用户只填写zipcode,那么我想自动填写所有其他字段。
reverse_geocoded_by :latitude, :longitude do |obj,results|
if geo = results.first
obj.city = geo.city
obj.zipcode = geo.postal_code
obj.country = geo.country_code
end
end
after_validation :reverse_geocode
但无法理解obj和结果是什么以及如何设置obj和结果。
请举例说明。
答案 0 :(得分:1)
我写了blog来解释它是如何工作的。你需要对geocoder
gem进行地理编码并获取相关信息。
用户将使用Geocomplete输入地址,并将该地址存储在users / locations表的地址栏中 然后,使用Geocoder获取其他地理信息并使用地址更新其他列。
这就是................
================ users / locations表,这里我将使用允许用户使用Geocomplete填写地址,然后使用它来获取其他详细信息使用Geocoder
class CreateLocations < ActiveRecord::Migration
def change
create_table :places do |t|
t.string :address
t.float :latitude
t.float :longitude
##======here the address field is important==========
t.string :address
t.string :country
t.string :state
t.string :city
t.string :pincode
t.timestamps
end
add_index :places, :address
end
end
==================使用用户/位置模型中的地址进行自动填充的地理编码
##i want to use the address column to autopopulate others columns
geocoded_by :address
##also i want to use the latitude.longitude to fetch all others informations and then save in relevant ##feilds
reverse_geocoded_by :latitude, :longitude do |obj,results|
if geo = results.first
obj.state = geo.state
obj.city = geo.city
obj.pincode = geo.postal_code
obj.country = geo.country
end
end
##更改/更新/验证地址只有在地址改为提高性能时,每次##将不断更新
after_validation :geocode, :reverse_geocode ,:if => :address_changed?