Domanda

Ho notato con le Google Maps per rotaie gemme che altrimenti funziona perfettamente che quando cambio un indirizzo nel campo del modello le coordinate non vengono aggiornate automaticamente, anche se il campo indirizzo sia aggiornato e salvato. Ho creato un metodo che chiama before_save geocodifica.

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

Questo funziona, ma mi chiedo se è necessario in quanto sembra che qualcosa che dovrebbe essere automatico nel gioiello. Mi sto perdendo qualcosa?

grazie ...

PS geocode restituisce un array così ho preso il primo (migliore) congettura

È stato utile?

Soluzione

L'aggiornamento delle coordinate è un processo difficile a causa del metodo gmaps4rails_address. È flessibile così facile da usare, ma la controparte è che non è possibile sapere se l'indirizzo davvero cambiato.

Ecco perché io do codificatori due diverse opportunità per soddisfare le loro esigenze:

  1. Se non si cura di prestazioni, è possibile aggiornare le coordinate ogni volta che il modello viene salvato (e quindi anche se l'indirizzo non è cambiato). Vedi qui: https://github.com/apneadiving/Google-Maps-for-Rails / wiki / Modello-personalizzazione .

Cambia :check_process a false:

    acts_as_gmappable :check_process => false

2. Se si vuole avere il pieno controllo del processo, impostare il booleano gmaps per false quando vuoi le coordinate da aggiornare. Potrebbe essere un campo nascosto nel modulo o di un gancio nel modello controllando i campi necessari.

Altri suggerimenti

Questo è un modo economico per risolvere il problema:

  1. aggiungere una colonna al modello - ad esempio last_g4r_address
  2. aggiungere una funzione before_validation:

    def check_g4r_address self.gmaps = false se last_g4r_address! = gmaps4rails_address self.last_g4r_address = gmaps4rails_address end

In questo modo il geocoding viene aggiornato solo se l'indirizzo è cambiato.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top