Обновление координат при изменении адреса модели с помощью Google-Maps-For-Rails - PullRequest
3 голосов
/ 27 апреля 2011

Я заметил, что с гемами Google Maps for Rails, в остальном, прекрасно работает, что при изменении адреса в поле модели координаты не обновляются автоматически, даже если поле адреса обновляется и сохраняется.Я создал метод before_save, который вызывает геокод.

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 геокод возвращает массив, поэтому я просто сделал первое (лучшее) предположение

Ответы [ 2 ]

8 голосов
/ 27 апреля 2011

Обновление координат - сложный процесс из-за метода 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 всякий раз, когда вы хотите обновить координаты.Это может быть скрытое поле в вашей форме или крючок в вашей модели, проверяющий необходимые поля.

0 голосов
/ 13 мая 2012

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

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

    def check_g4r_address self.gmaps = false, если last_g4r_address! = gmaps4rails_address self.last_g4r_address = gmaps4rails_address конец

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

...