2010-10-27 63 views
1

我在我的shop.rb中有这个:每次更新地址时更新地理编码纬度和经度

def geocode_address 
    if !address_geo.blank? 
    geo=Geokit::Geocoders::MultiGeocoder.geocode(address_geo) 
    errors.add(:address, "Could not Geocode address") if !geo.success 
    self.lat, self.lng = geo.lat,geo.lng if geo.success 
    end 
end 

# Checks whether this object has been geocoded or not. Returns the truth 
def geocoded? 
    lat? && lng? 
end 

和我的shops_controller.rb

def update 
@shop = Shop.find(params[:id]) 
if @shop.update_attributes(params[:shop]) 
    flash[:notice] = "Successfully saved." 
    redirect_to shop_path(@shop, :type => @shop.shop_type) 
else 
    render :action => :edit 
end 
end 

现在当用户首次创建条目时,地址被地理编码,纬度和经度保存到数据库。

但是当用户更新地址时,纬度和经度将不再被地理编码,因此仍然使用旧的纬度和经度,这是第一次保存。

如何在每次更新条目时让Rails重新进行地理编码?

我不能仅仅依赖地址,因为geokit中存在一个错误,当我尝试根据地址显示多个地图时,只会显示最后一个地图。

我正在使用geokit,Gmaps,Google Maps ...

谢谢。

回答

1

我把这个在我的模型:

before_validation_on_update :geocode_address 
0

如果用户更改他们的地址不能实质上像新地址一样处理它?你基本上有2个新地址,你只需要将新创建的地址与用户的帐户关联起来,一切都应该起作用。

+0

不,这不是用户的地址。这是一家商店的地址。比方说,最初一家商店的地址与城市和国家的信息一起保存,地理编码将基于该城市和国家。但是,如果更新的地址与街道名称更精确,则地理编码应更新经度和纬度。 – Victor 2010-10-27 14:10:50