Пропустить геокодирование в некоторых случаях

Я использую 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 пара уже установлена.

Другие вопросы по тегам