В моем приложении я иногда создаю пользователя на лету, и электронная почта пользователя должна иметь действительный формат и быть уникальной.
Я хочу перенаправить в разные места, в зависимости от того, ЧТО валидация вызвалавозникшая ошибка: неверный формат против дубликата.
В моем коде у меня есть
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 is "Ошибка проверки: электронная почта недействительна "
Если электронная почта уже существует в таблице, e.message будет" Проверка не удалась: электронная почта уже получена "
Я ненавижу идею парсинга e.текст сообщения, чтобы определить причину ... есть ли лучший способ для обработчика спасения определить причину, по которой возникло исключение ActiveRecord :: RecordInvalid?
PS Я знаю, что в этом примере я могу просто проверить заранееэлектронная почта, уже существовавшая до сохранения, но я пытаюсь понять общее решение для обнаружения различных действий при проверке и реагирования на них, выдавая одно и то же исключение.