Условные обратные вызовы активной записи

Следующие геокоды (получают координаты адреса) автоматически при создании или обновлении. Это в моей модели местоположения

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?

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