Google-Maps-for-Railsを使用して、モデルのアドレスの変更に関する座標を更新します
-
24-10-2019 - |
質問
それ以外の場合は、モデルフィールドのアドレスを変更すると、アドレスフィールドが更新されて保存されていても、座標が自動的に更新されないことに完全に機能する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つの異なる機会を与えます:
- パフォーマンスを気にしない場合は、モデルが保存されるたびに座標を更新できます(アドレスが変更されていなくても)。ここを参照してください: https://github.com/apneadiving/google-maps-for-rails/wiki/model-customization.
変化する :check_process
に false
:
acts_as_gmappable :check_process => false
2.プロセスを完全に制御したい場合は、 gmaps
ブールアギー false
座標を更新したいときはいつでも。それはあなたのフォームの隠されたフィールド、またはあなたのモデルのフックである可能性があります。
他のヒント
これは問題を解決するための経済的な方法です。
- モデルに列を追加します-last_g4r_address
before_validation関数を追加します:
def check_g4r_address self.gmaps = false rast_g4r_address!= gmaps4rails_address self.last_g4r_address = gmaps4rails_address end
このようにして、アドレスが変更された場合にのみ、ジオコーディングが更新されます。
所属していません StackOverflow