我正在尝试创建自己的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
当我包裹筹集开始/救援/结束,它打印ē作为的ApplicationController :: LocationInvalid:
begin
raise ApplicationController::LocationInvalid
rescue => e
puts e
end
输出:
入门使用 “/” 为127.0.0.1,在2015年8月21日15时19分32秒-0400 的ApplicationController :: LocationInvalid
仅在process_action
呼叫我已经试过各种形式指定的ApplicationController类,而不是在结果没有改变的......
尝试'提升ApplicationController :: LocationInvalid.new'。 – CWitty
@CWitty谢谢你的建议。看起来很合理。但结果基本相同。我看到一个提示:“你可以提出任何事情”,看起来你可以提出一个课程或一个实例。 Rescue_from似乎并没有分享那种随便的态度...... –
我不知道在评估课程的时候你是否引发了异常,而且对于'reset_it'的def还没有被评估呢?尝试在方法中放置'raise',然后从控制台或其他东西调用该方法。像Daiku说的 – Daiku