Пропустить геокодирование в некоторых случаях
Я использую Geocode Gem для преобразования адресов в координаты (широта, широта). Для этого я добавил это в модель профиля пользователя с геокодированием:
geocoded_by :address
after_validation :geocode, if: Proc.new { |p| p.address_changed? }
Это прекрасно работает, но сейчас я делаю сценарий миграции, который заполняет таблицу профилей адресами, а также долготой и широтой. В этом случае геокодер все еще выполняет преобразование, и я получаю следующее предупреждение много раз:
Google Geocoding API error: over query limit.
Как я могу пропустить геокодирование в некоторых случаях, например, при миграции, когда у меня уже есть координаты?
2 ответа
В config/initializers/geocoder.rb
поставить следующий код:
Geocoder::Configuration.lookup = :yandex
for update to quota: 25000 requests / day
Подробнее здесь.
Правильный ответ зависит от того, как вы реализовали address_changed?
,
Рекомендуется:
after_validation :geocode, if: ->(obj){ obj.address.present? and obj.address_changed? }
но я склонен использовать:
after_validation :geocode, if: ->(obj){ obj.address.present? and !obj.address.latitude? and !obj.address.longitude? }
в этом случае вы пропустите геокодирование, если latitude,longitude
пара уже установлена.