validates_uniqueness пользовательская обработка ROR - PullRequest
0 голосов
/ 20 сентября 2011

Я хотел бы загрузить конкретную запись, если она не соответствует ограничению validates_uniqueness.

У меня есть идентификатор (первичный ключ) и заголовок в моей модели.Если пользователь вводит заголовок, который уже присутствует, если вы хотите найти запись с заголовком и загрузить эту запись вместо выдачи ошибки.

Есть ли способ сделать это?

1 Ответ

0 голосов
/ 20 сентября 2011

Вы можете использовать обратный вызов 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
...