rails 3.1: как приложение может обрабатывать различные «причины» для ActiveRecord::RecordInvalid (например, дублирование или ошибка проверки)

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

Я хотел бы перенаправить в разные места в зависимости от того, КАКАЯ проверка вызвала появление ошибки: неверный формат или дубликат.

В моем коде есть

    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 Я знаю, что в ЭТОМ примере я могу просто заранее проверить уже существующее электронное письмо перед сохранением, но я пытаюсь понять общее решение для обнаружения и действий при различных ошибках проверки, вызывающих одно и то же исключение.

7
задан jpwynn 6 March 2012 в 21:31
поделиться