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

War es hilfreich?

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:

  1. 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:

  1. hinzufügen einer Spalte zu der Modell - eg last_g4r_address
  2. 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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top