我的API Controller 有时会抛出Pundit::NotAuthorizedError,我想使用错误代码403呈现特定的json响应。对于一般错误,我想使用500状态渲染其他内容。

但是:render_error救援总是会捕获Pundit错误,结果我得到了500。为什么会发生这种情况,我应该怎么做才能避免这种情况?如果我完全删除rescue_from StandardError...,它可以正常工作。 (ActionController::ParameterMissing可以正常工作,因此我想它与继承有关,但我认为它会尝试按代码中给出的顺序匹配异常类型)。

class Api::V1::BaseController < ActionController::API
  include Pundit

  rescue_from Pundit::NotAuthorizedError, with: :render_not_authorized
  rescue_from ActionController::ParameterMissing, with: :render_bad_request
  rescue_from StandardError, with: :render_error

  def  render_not_authorized
     ....
  end

  def  render_error
    ....
  end
end

最佳答案

查看docs,其中指出:

特别注意第一个注释(“按最通用到最特定的顺序定义处理程序”),该注释指出:

09-06 12:09