Обновление координат при изменении адреса модели с использованием Google-Maps-для-районов

StackOverflow https://stackoverflow.com/questions/5807967

Вопрос

Я заметил с картами Google для Greails Gems, которые в противном случае работают отлично, что при изменении адреса в поле модели координаты не обновляются автоматически, даже если полевое поле обновляется и сохраняется. Я создал метод до_save, который вызывает 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

Это работает, но мне интересно, необходимо ли это, так как это кажется чем -то, что должно быть автоматическим в драгоценном камне. Я что-то упускаю?

Благодарность...

PS GeoCode возвращает массив, поэтому я только что взял первое (лучшее) догадку

Это было полезно?

Решение

Обновление координат - сложный процесс из -за gmaps4rails_address метод Он гибкий так прост в использовании, но аналог в том, что невозможно узнать, действительно ли адрес действительно изменился.

Вот почему я предоставляю программистам две разные возможности для удовлетворения их потребностей:

  1. Если вы не заботитесь о производительности, вы можете обновить координаты каждый раз, когда модель сохраняется (а затем даже если адрес не изменился). Глянь сюда: https://github.com/apneadiving/google-maps-for-rails/wiki/model-customization.

Изменять :check_process к false:

    acts_as_gmappable :check_process => false

2. Если вы хотите полный контроль над процессом, установите gmaps логический false Всякий раз, когда вы хотите обновлять координаты. Это может быть скрытое поле в вашей форме или крючок в вашей модели, проверяя необходимые поля.

Другие советы

Это экономический способ решить проблему:

  1. Добавить столбец в модель - например, последний_g4r_address
  2. Добавьте функцию перед_validation:

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

Таким образом, геокодирование обновляется только в случае изменения адреса.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top