2010-10-27 64 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