错误处理程序的优先级: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 中的救援块呈现的内容。