3

モデルフィールドの住所を変更すると、住所フィールドが更新および保存されても、座標が自動的に更新されないことに気付きました。ジオコードを呼び出す before_save メソッドを作成しました。

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ジオコードは配列を返すので、最初の(最良の)推測を行いました

4

2 に答える 2

8

メソッドの関係で、座標の更新はトリッキーなプロセスですgmaps4rails_address。柔軟で使いやすいですが、アドレスが本当に変更されたかどうかを知ることはできません。

そのため、私はコーダーのニーズに合わせて 2 つの異なる機会を提供しています。

  1. パフォーマンスを気にしない場合は、モデルが保存されるたびに (アドレスが変更されていなくても) 座標を更新できます。ここを参照してください: https://github.com/apneadiving/Google-Maps-for-Rails/wiki/Model-Customization

:check_processに変更false:

    acts_as_gmappable :check_process => false

2. プロセスを完全に制御したい場合は、座標を更新するたびにgmapsブール値をに設定します。falseフォームの非表示フィールドまたは必要なフィールドをチェックするモデルのフックである可能性があります。

于 2011-04-27T19:04:59.547 に答える
0

これは、問題を解決するための経済的な方法です。

  1. モデルに列を追加します - 例: last_g4r_address
  2. before_validation 関数を追加します。

    def check_g4r_address self.gmaps = false if last_g4r_address != gmaps4rails_address self.last_g4r_address = gmaps4rails_address end

このようにして、住所が変更された場合にのみジオコーディングが更新されます。

于 2012-05-13T19:07:08.453 に答える