Вы можете использовать обратный вызов before_validation
, чтобы самостоятельно проверить достоверность, а в случае сбоя - запустить требуемое поведение.Таким образом, один из способов сделать это - написать код в before_validation
, и там вы можете сделать простой вызов .valid?
или вручную запустить проверку на уникальность.Если проверка не пройдена, вы можете остановить цепочку обратных вызовов и запустить собственное поведение.
before_validation
- это один из множества доступных вам обратных вызовов ActiveRecord .
Другой,более распространенный способ сделать это - в вашем контроллере вместо простого сохранения вы можете просто обернуть вызов .save
в оператор if, потому что .save
возвращает false
, если проверка не удалась.Вы можете использовать это как способ перенаправления на альтернативное действие в описанной вами ситуации.
@new_record = ThingImSaving.new(params[:thing_im_saving]
if @new_record.save
...validation has passed, continue the normal path
else
...validation has failed, do something else.
end