错误处理程序的优先级:rescue_from vs 方法中的救援
Precedence of error handlers: rescue_from vs rescue in a method
在我的 application_controller.rb 中有以下行
rescue_from Pundit::NotAuthorizedError, with: :user_not_authorized
现在,在一种方法中,我想以不同的方式处理该特定错误,我已将其添加到控制器中的一种方法中。
class MyClass < ApplicationController
def my_method
# raising the Pundit::NotAuthorizedError in the method
authorize resource, :my_method?
rescue Pundit::NotAuthorizedError
# code on how to deal with the error
end
end
如果我执行代码,来自 application_controller.rb 的错误处理程序将处理我的错误,而不是方法中的错误处理程序。
所以我的问题是,错误处理程序的优先级是什么?有什么方法可以更改它,以便在方法中而不是全局处理错误?
请忘记我之前的回答,我自己在重现你的问题时犯了一个错误。事实上我无法复制它。
请看看我创建的这个小演示应用程序:
https://github.com/andi-dev/rescue-handler-demo/blob/master/app/controllers/peas_controller.rb
rescue_from
处理程序未执行,浏览器显示我从 action-method 中的救援块呈现的内容。
在我的 application_controller.rb 中有以下行
rescue_from Pundit::NotAuthorizedError, with: :user_not_authorized
现在,在一种方法中,我想以不同的方式处理该特定错误,我已将其添加到控制器中的一种方法中。
class MyClass < ApplicationController
def my_method
# raising the Pundit::NotAuthorizedError in the method
authorize resource, :my_method?
rescue Pundit::NotAuthorizedError
# code on how to deal with the error
end
end
如果我执行代码,来自 application_controller.rb 的错误处理程序将处理我的错误,而不是方法中的错误处理程序。
所以我的问题是,错误处理程序的优先级是什么?有什么方法可以更改它,以便在方法中而不是全局处理错误?
请忘记我之前的回答,我自己在重现你的问题时犯了一个错误。事实上我无法复制它。
请看看我创建的这个小演示应用程序:
https://github.com/andi-dev/rescue-handler-demo/blob/master/app/controllers/peas_controller.rb
rescue_from
处理程序未执行,浏览器显示我从 action-method 中的救援块呈现的内容。