Actualización de coordenadas para cambiar la dirección del modelo utilizando Google-Maps-for Rails
-
24-10-2019 - |
Pregunta
He notado con las gemas de Google Maps for Rails, lo que de otro modo funciona perfectamente que cuando cambio una dirección en el campo del modelo, las coordenadas no se actualizan automáticamente, a pesar de que el campo de dirección se actualiza y guarda. He creado un método before_save que llama a 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
Esto funciona, pero me pregunto si es necesario, ya que parece algo que debería ser automático en la gema. ¿Me estoy perdiendo de algo?
Gracias...
PS Geocode devuelve una matriz, así que tomé la primera (mejor) suposición
Solución
The refresh of the coordinates is a tricky process because of the gmaps4rails_address
method. It's flexible so easy to use but the counterpart is it's not possible to know if the address really changed.
That's why I give coders two different opportunities to fit their needs:
- If you don't care about performance, you could refresh the coordinates every time the model is saved (and then even if the address hasn't changed). See here: https://github.com/apneadiving/Google-Maps-for-Rails/wiki/Model-Customization.
Change :check_process
to false
:
acts_as_gmappable :check_process => false
2. If you want to have full control over the process, set the gmaps
boolean to false
whenever you want the coordinates to be updated. It could be a hidden field in your form or a hook in your model checking the necessary fields.
Otros consejos
Esta es una forma económica de resolver el problema:
- Agregue una columna al modelo - por ejemplo, last_g4r_address
Agregue una función antes de_validación:
def check_g4r_address self.gmaps = false si last_g4r_address! = gmaps4rails_address self.last_g4r_address = gmaps4rails_address end
De esta manera, la geocodificación se actualiza solo si la dirección cambia.