为什么这个加注没有被挽救,什么会纠正它,使它成为现实?
Why is this raise not rescued, and what will correct it so that it is?
我正在尝试创建自己的 StandardError 异常,但我似乎无法通过加注触发 rescue_from。错误被提出但从未被挽救。我搭建了一个简单的应用来试试,如下:
class ApplicationController < ActionController::Base
protect_from_forgery with: :exception
class ApplicationController::LocationInvalid < StandardError
end
rescue_from ApplicationController::LocationInvalid, with: :reset_it
raise ApplicationController::LocationInvalid
private
def reset_it(exception)
session.clear
cookies['XSRF-TOKEN'] = form_authenticity_token if protect_against_forgery?
puts 'Reset it processed'
end
end
当我将加注包装在 begin/rescue/end 中时,它会将 e 打印为 ApplicationController::LocationInvalid:
begin
raise ApplicationController::LocationInvalid
rescue => e
puts e
end
输出:
Started GET "/" for 127.0.0.1 at 2015-08-21 15:19:32 -0400
ApplicationController::LocationInvalid
我尝试了各种形式的指定 ApplicationController class,但结果没有任何变化...
的源代码
rescue_with
仅在 process_action
调用期间有效,但您在 class 评估期间引发异常。可能最简单的测试方法是创建带有一些动作的简单控制器,并尝试在该动作期间引发异常,rescue_with
应该可以工作。
我正在尝试创建自己的 StandardError 异常,但我似乎无法通过加注触发 rescue_from。错误被提出但从未被挽救。我搭建了一个简单的应用来试试,如下:
class ApplicationController < ActionController::Base
protect_from_forgery with: :exception
class ApplicationController::LocationInvalid < StandardError
end
rescue_from ApplicationController::LocationInvalid, with: :reset_it
raise ApplicationController::LocationInvalid
private
def reset_it(exception)
session.clear
cookies['XSRF-TOKEN'] = form_authenticity_token if protect_against_forgery?
puts 'Reset it processed'
end
end
当我将加注包装在 begin/rescue/end 中时,它会将 e 打印为 ApplicationController::LocationInvalid:
begin
raise ApplicationController::LocationInvalid
rescue => e
puts e
end
输出:
Started GET "/" for 127.0.0.1 at 2015-08-21 15:19:32 -0400 ApplicationController::LocationInvalid
我尝试了各种形式的指定 ApplicationController class,但结果没有任何变化...
rescue_with
仅在 process_action
调用期间有效,但您在 class 评估期间引发异常。可能最简单的测试方法是创建带有一些动作的简单控制器,并尝试在该动作期间引发异常,rescue_with
应该可以工作。