Google-Maps-for-Railsを使用して、モデルのアドレスの変更に関する座標を更新します

StackOverflow https://stackoverflow.com/questions/5807967

質問

それ以外の場合は、モデルフィールドのアドレスを変更すると、アドレスフィールドが更新されて保存されていても、座標が自動的に更新されないことに完全に機能するRails GemsのGoogleマップに気づきました。 GeoCodeを呼び出す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

これは機能しますが、宝石で自動的にすべきもののように思えるので、必要かどうか疑問に思っています。私は何かが足りませんか?

ありがとう...

psgeocodeは配列を返しますので、最初の(最高の)推測をしました

役に立ちましたか?

解決

座標の更新は、 gmaps4rails_address 方法。柔軟性が非常に使いやすいですが、対応するのは、アドレスが本当に変わったかどうかを知ることができないということです。

だから私はコーダーに彼らのニーズに合う2つの異なる機会を与えます:

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

変化する :check_processfalse:

    acts_as_gmappable :check_process => false

2.プロセスを完全に制御したい場合は、 gmaps ブールアギー false 座標を更新したいときはいつでも。それはあなたのフォームの隠されたフィールド、またはあなたのモデルのフックである可能性があります。

他のヒント

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

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

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

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top