Rescue_from для запросов javascript
В моем приложении 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 я не могу просто вызвать обработку ошибок по умолчанию, потому что метод "no_handler" больше не существует.
Обновление
DOH
Я разместил это после 3 часов поиска, но только через 30 минут после публикации я нашел решение самостоятельно.
Просто заново создайте исключение.
Поскольку вы находитесь в обработке ошибок, с этим исключением больше не выполняется обработка.
Ответы
Ответ 1
Просто переделайте исключение.
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, а стандартная страница исключения не отображается.