В моем приложении я иногда создаю пользователя на лету, и электронная почта пользователя должна быть в допустимом формате и быть уникальной.
Я хотел бы перенаправить в разные места в зависимости от того, КАКАЯ проверка вызвала появление ошибки: неверный формат или дубликат.
В моем коде есть
begin
user.save!
flash[:notice] = "Created new user #{email} with password #{password}"
rescue ActiveRecord::RecordInvalid => e
flash[:alert] = "Failed to create account because #{e.message}"
redirect_to SOMEPLACE
end
Если адрес электронной почты имеет недопустимый формат (например, «user@example»), электронное сообщение будет «Проверка не удалась: адрес электронной почты недействителен»
Если адрес электронной почты уже существует в таблице, e.message: «Проверка не удалась: электронное письмо уже было принято»
Мне не нравится идея анализа текста электронного сообщения для определения причины ... есть ли лучший способ для обработчика спасения определить основную причину ActiveRecord :: Было сгенерировано исключение RecordInvalid?
PS Я знаю, что в ЭТОМ примере я могу просто заранее проверить уже существующее электронное письмо перед сохранением, но я пытаюсь понять общее решение для обнаружения и действий при различных ошибках проверки, вызывающих одно и то же исключение.