Aktualisieren Sie die Koordinaten auf model ändern die Adresse mit Google-Maps-Schienen
-
24-10-2019 - |
Frage
Ich habe bemerkt, mit der Google Maps Für Rails-Edelsteine, die ansonsten perfekt funktioniert, dass wenn ich eine Adresse im Modell-Feld die Koordinaten nicht automatisch aktualisiert, auch wenn das Feld Adresse ist aktualisiert und gespeichert.Ich habe erstellt eine before_save Methode, die fordert, geocode.
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
Dies funktioniert, aber ich Frage mich, ob es notwendig ist, wie es scheint, wie etwas, das sollte automatisch in der gem.Bin ich etwas fehlt?
Dank...
PS geocode gibt ein array zurück, so dass ich nahm einfach die ersten (besten) guess
Lösung
Das aktualisieren der Koordinaten ist ein heikler Prozess, da der gmaps4rails_address
Methode.Es ist flexibel, so einfach zu bedienen, aber das Gegenstück ist es nicht möglich zu wissen, ob die Adresse wirklich geändert.
Das ist, warum ich geben Coder, zwei verschiedene Möglichkeiten, um zu passen Ihre Bedürfnisse:
- Wenn Sie kümmern sich nicht um die Leistung, die Sie aktualisieren könnte die Koordinaten jedes mal, wenn das Modell gespeichert wird (und wenn dann auch noch die Adresse hat sich nicht geändert).Siehe hier: https://github.com/apneadiving/Google-Maps-for-Rails/wiki/Model-Customization.
Ändern :check_process
zu false
:
acts_as_gmappable :check_process => false
2.Wenn Sie wollen die volle Kontrolle über den Prozess, stellen Sie die gmaps
boolean false
wenn Sie möchten, dass die Koordinaten werden aktualisiert.Es könnte ein verstecktes Feld im Formular oder einen Haken in Ihrem Modell prüfen Sie die notwendigen Felder aus.
Andere Tipps
Dies ist ein wirtschaftlicher Weg, um das problem zu lösen:
- hinzufügen einer Spalte zu der Modell - eg last_g4r_address
fügen Sie ein before_validation Funktion:
def check_g4r_address selbst.gmaps = false, wenn last_g4r_address != gmaps4rails_address selbst.last_g4r_address = gmaps4rails_address Ende
Diese Art der Geokodierung wird nur aktualisiert, wenn die Adresse geändert.