Rescue_from для запросов javascript - PullRequest
20 голосов
/ 25 июля 2011

В моем приложении Rails 2.3.8 у меня был код rescue_from для исключений, которые генерируются во время действий javascript:

rescue_from ::Exception, :with => :show_js_errors

...

def show_js_errors exception
  if request.format == :js
    flash[:error] = 'some error occured'
    render :update do |page|
      page.redirect_to({:controller => '/home', :action => :index})
    end
  else
    # use default error handling for non-JS requests
    rescue_action_without_handler(exception)
  end
end

Поэтому мои пользователи получают сообщение об ошибке, если при вызове ajax возникает ошибка,В Rails 3 я не могу просто вызвать обработку ошибок по умолчанию, потому что метод "без_ручки" больше не существует.

update doh

Я опубликовал это после 3 часов поиска, но только через 30 минут после публикации я сам нашел решение.

Просто повторно вызовите исключение.

Поскольку вы находитесь в ошибкеобработка, дальнейшая обработка с этим исключением не производится.

1 Ответ

1 голос
/ 11 февраля 2014

Просто вызовите исключение.

def show_js_errors exception
  if request.format == :js
    flash[:error] = 'some error occured'
    render :update do |page|
      page.redirect_to({:controller => '/home', :action => :index})
    end
  else
    raise # <<
  end
end

http://simonecarletti.com/blog/2009/11/re-raise-a-ruby-exception-in-a-rails-rescue_from-statement/ совпадает:

rescue_from ActiveRecord::StatementInvalid do |exception|
  if exception.message =~ /invalid byte sequence for encoding/
    rescue_invalid_encoding(exception)
  else
    raise
  end
end

[...] Исключение корректно перебрасывается, но оно не перехватывается [sic] стандартным механизмом спасения Rails, и стандартная страница исключения не отображается.

...