Условные обратные вызовы активной записи
Следующие геокоды (получают координаты адреса) автоматически при создании или обновлении. Это в моей модели местоположения
def full_address
full_address = "#{address},#{city},#{state}"
end
geocoded_by :full_address
after_validation :geocode, :if => :address_changed?
Но я не хочу, чтобы геокодирование было выполнено, если я установлю coords_locked
к истине.
Я не могу понять, как это сделать. Я старался
geocoded_by :full_address
after_validation :geocode, :if => { :coords_locked == false || :address_changed? }
Какой правильный синтаксис или я об этом все ошибаюсь. Спасибо
PS. Просто понял, что мне, вероятно, не нужен full_address =
,
1 ответ
Я думаю, что вы хотите следующее от Rails Guides - http://guides.rubyonrails.org/active_record_validations.html
5.3 Использование Proc с: если и: если
Наконец, можно связать: if и: разве что с объектом Proc, который будет вызван. Использование объекта Proc дает вам возможность написать встроенное условие вместо отдельного метода. Этот вариант лучше всего подходит для однострочников.
Так что, возможно, что-то вроде этого:
after_validation :geocode,
if: Proc.new { |location| location.coords_locked? && location.address_changed? }
Тогда вы могли бы, возможно, настроить некоторые области, чтобы определить coords_locked?
а также address_changed?