config.exceptions_app = self.routes
config.action_dispatch.rescue_responses.merge!(
'Errors::UnauthorizedException' => :unauthorized
)
class ErrorsController < ActionController::Base
layout 'application'
def show
@exception = env["action_dispatch.exception"]
@status_code = params[:code] || ActionDispatch::ExceptionWrapper.new(env, @exception).status_code
render @status_code.to_s, :status => @status_code
end
end
%w( 404 422 500 401 ).each do |code|
get code, :to => 'errors#show', :code => code
end
我在这里缺少什么?如果我去/:代码,我会得到正确的答案。如果我转到Rails将抛出404或500的页面,我会得到正确的响应。但是,如果我尝试raise Errors::UnauthorizedException
,我将获得500而不是401.如何将我想要的状态代码附加到此例外?
答案 0 :(得分:1)
我遇到了完全相同的情况,在我的情况下修复非常简单。我无法解释它,但根据你定义Error类的方式和位置,它可能是一个&#34;顶级常量&#34; (至少那是我的日志所说的)。
所以而不是:
config.action_dispatch.rescue_responses.merge!(
'Errors::UnauthorizedException' => :unauthorized
)
做
config.action_dispatch.rescue_responses.merge!(
'UnauthorizedException' => :unauthorized
)