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

¿Fue útil?

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:

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

  1. Agregue una columna al modelo - por ejemplo, last_g4r_address
  2. 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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top