我的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,其中指出:
特别注意第一个注释(“按最通用到最特定的顺序定义处理程序”),该注释指出: