2011-04-27 70 views
3

我注意到了Google Maps for Rails gems,當我更改模型字段中的地址時,座標不會自動更新,地址欄被更新並保存。我創建了一個調用geocode的before_save方法。使用Google-Maps-For-Rails更新模型地址的座標

before_save :update_location_coordinates # in model being mapped 

protected 

def update_location_coordinates 
    place = Gmaps4rails.geocode(gmaps4rails_address).first 
    self.longitude, self.latitude = place[:lng], place[:lat] unless place.empty? 
rescue 
    nil 
end 

這個工程,但我想知道是否有必要,因爲它似乎應該是自動的寶石。我錯過了什麼嗎?

感謝...

PS地理編碼,所以我只是把第一個(最好的)猜測

回答

7

座標的刷新是因爲gmaps4rails_address方法的棘手的過程返回數組。它很靈活,使用起來很方便,但是對方不可能知道地址是否真的改變了。

這就是爲什麼我給程序員,以滿足他們的需要兩種不同的機會:

  1. 如果你不關心性能,你可以刷新座標每次模型保存時間(然後即使地址沒有改變)。看到這裏:https://github.com/apneadiving/Google-Maps-for-Rails/wiki/Model-Customization

變化:check_processfalse

acts_as_gmappable :check_process => false 

2.如果你想擁有對過程的完全控制,只要你想要的座標將被更新的gmaps布爾設置爲false。它可能是您窗體中的一個隱藏字段,或者您的模型中的鉤子檢查必要的字段。

+0

太棒了!謝謝。現在,我知道該gmaps字段的用途。我想我錯過了它的文檔。 – 2011-04-28 13:14:30

0

這是解決問題的一個經濟的方式:

  1. 一列添加到模型 - 如last_g4r_address
  2. 添加before_validation功能:

    高清check_g4r_address self.gmaps = FALSE如果last_g4r_address!= gmaps4rails_address self.last_g4r_address = gmaps4rails_address end

這種方式僅在地址更改時才更新地理編碼。

+0

這裏更經濟:https://github.com/apneadiving/Google-Maps-for-Rails/issues/208 – apneadiving 2012-05-13 20:41:00