Question

Je l'ai remarqué avec Google Maps pour gemmes Rails qui fonctionne par ailleurs parfaitement que lorsque je change une adresse dans le champ de modèle, les coordonnées ne sont pas automatiquement mis à jour, même si le champ d'adresse est mis à jour et enregistré. J'ai créé une méthode de before_save qui appelle géocodage.

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

Cela fonctionne, mais je me demande s'il est nécessaire, car il semble que quelque chose qui devrait être automatique dans la pierre précieuse. Am quelque chose que je manque?

Merci ...

PS géocodage retourne un tableau, donc je viens de prendre la première estimation (meilleure)

Était-ce utile?

La solution

Le rafraîchissement des coordonnées est un processus délicat en raison de la méthode de gmaps4rails_address. Il est souple si facile à utiliser, mais la contrepartie est qu'il est impossible de savoir si l'adresse a vraiment changé.

C'est pourquoi je donne deux possibilités différentes codeurs pour répondre à leurs besoins:

  1. Si vous ne se soucient pas de la performance, vous pouvez actualiser les coordonnées chaque fois que le modèle est enregistré (et même si l'adresse n'a pas changé). Voir ici: https://github.com/apneadiving/Google-Maps-for-Rails / wiki / Modèle-personnalisation .

Changement :check_process à false:

    acts_as_gmappable :check_process => false

2. Si vous voulez avoir un contrôle total sur le processus, définissez le booléen gmaps à false chaque fois que vous voulez les coordonnées à jour. Il pourrait être un champ caché dans votre formulaire ou un crochet dans votre modèle de vérifier les champs nécessaires.

Autres conseils

Ceci est un moyen économique pour résoudre le problème:

  1. ajouter une colonne au modèle - par exemple last_g4r_address
  2. ajouter une fonction before_validation:

    def check_g4r_address self.gmaps = false si last_g4r_address! = gmaps4rails_address self.last_g4r_address = gmaps4rails_address fin

De cette façon, le géocodage est mis à jour que si l'adresse a changé.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top