Обработка исключений Rails - PullRequest
16 голосов
/ 27 июня 2010

Как я могу отправить сообщения об ошибках, которые происходят в коде модели, обратно в представление.Я имею в виду.У меня есть

begin
       Some code
rescue
       Exception Handling
end

, теперь возникает ошибка, и при спасении я хотел бы отправить сообщение обратно на контроллер, чтобы оно отображалось в представлении.Нужно ли использовать переменную, которая должна содержать несколько сообщений об ошибках, возникающих в одном запросе, объединять их и отправлять обратно контроллеру, чтобы я мог отобразить его в представлении ?.Rails уже показывает некоторые сообщения об ошибках, например поле не может быть пустым.Я спрашиваю о других исключениях, которые встречаются в функциях, присутствующих в коде модели.

Ответы [ 5 ]

12 голосов
/ 28 июня 2010

Пример того, что я делаю в своем собственном коде:

def create
  @letter = Letter.new(params[:id])

  begin
    @letter.do_something_that_could_throw_an_exception
    flash[:notice] = I18n.translate('letter.success_create')
  rescue => e
    logger.error "letter_controller::create => exception #{e.class.name} : #{e.message}"
    flash[:error] = "#{I18n.translate('letter.letter_create_failed')}<br/>Detailed error: #{e.message}"
    ExceptionNotifier.deliver_exception_notification(e, self, request)
    # redirect somewhere sensible?
  end
end

конец

Это помогает?

7 голосов
/ 27 июня 2010
begin
       Some code
rescue =>e
       @error= e.message
       Exception Handling
end

просмотров

<%= @error %>
6 голосов
/ 28 июня 2010

Исключения, возникающие при сохранении / создании модели

Я использую обратные вызовы ActiveRecord after_validation, after_validation_on_create и before_save (в зависимости от обстоятельств), чтобы получить дополнительные данные и убедиться, что все готово для сохранения.Затем, если возникнут проблемы, я сохраняю исключение в ошибках [: base], используя add_to_base .Таким образом, представление будет отображать сообщение об ошибке так же, как и любые другие ошибки проверки.

Помните, что если ваш метод before_save возвращает false, сохранение завершится неудачей.

Исключениядля других методов модели

Доступны все обычные методы:

  1. Вызовите конкретное исключение, которое будет ловить контроллер.Исключение может содержать номер ошибки, который представление преобразует в сообщение об ошибке.Или модель может экспортировать error_num в хэш error_msg
  2. Возвращать код ошибки в качестве параметра возврата метода.Например, если вы хотите также использовать Flash, чтобы дать положительное сообщение, когда все работает, вы можете вернуть код msg_code.Затем получите отрицательные коды сообщений для ошибок и положительные коды для разных типов успеха.
  3. Установите переменную экземпляра @error (или любую другую) для проверки вызывающей стороной.
3 голосов
/ 23 мая 2014

Установить обработчик исключения в ApplicationController

class ApplicationController < ActionController::Base

  rescue_from Exception, :with => :handle_exception

  def handle_exception
    flash[:error] = error.message
    redirect_to request.referer || root_path
  end
end

Это общий пример, вы можете указать типы исключений, например rescue_from ActiveRecord::RecordNotFound, ActiveRecord::RecordInvalid и т. Д.

3 голосов
/ 04 января 2013
begin
  some code
rescue StandardError => ex      
  flash[:error] = "#{ex}"
  render :index
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...