Обновление координат при изменении адреса модели с использованием Google-Maps-для-районов
-
24-10-2019 - |
Вопрос
Я заметил с картами 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
метод Он гибкий так прост в использовании, но аналог в том, что невозможно узнать, действительно ли адрес действительно изменился.
Вот почему я предоставляю программистам две разные возможности для удовлетворения их потребностей:
- Если вы не заботитесь о производительности, вы можете обновить координаты каждый раз, когда модель сохраняется (а затем даже если адрес не изменился). Глянь сюда: https://github.com/apneadiving/google-maps-for-rails/wiki/model-customization.
Изменять :check_process
к false
:
acts_as_gmappable :check_process => false
2. Если вы хотите полный контроль над процессом, установите gmaps
логический false
Всякий раз, когда вы хотите обновлять координаты. Это может быть скрытое поле в вашей форме или крючок в вашей модели, проверяя необходимые поля.
Другие советы
Это экономический способ решить проблему:
- Добавить столбец в модель - например, последний_g4r_address
Добавьте функцию перед_validation:
def check_g4r_address self.gmaps = false if last_g4r_address! = gmaps4rails_address self.last_g4r_address = gmaps4rails_address end
Таким образом, геокодирование обновляется только в случае изменения адреса.