自定义error handling和cancan

我正在尝试实现自定义error handling以及使用CanCan。 当用户到达他们不允许去的区域时,会抛出CanCan :: AccessDenied错误,并将它们发送到根URL。 相反,’rescue_from Exception’捕获CanCan :: AccessDenied并且用户获得500错误。 我究竟做错了什么?

#application_controller.rb rescue_from CanCan::AccessDenied do |exception| redirect_to main_app.root_url, :alert => exception.message end rescue_from Exception, :with => :render_error rescue_from Mongoid::Errors::DocumentNotFound, :with => :render_not_found rescue_from ActionController::RoutingError, :with => :render_not_found rescue_from ActionController::UnknownController, :with => :render_not_found rescue_from AbstractController::ActionNotFound, :with => :render_not_found def render_not_found(exception) render :template => "/errors/404.html", :layout => 'errors.html', :status => 404 end def render_error(exception) render :template => "/errors/500.html", :layout => 'errors.html', :status => 500 end 

您是否尝试重新排序来自例外/错误的rescue_,更先通用,稍后更具体,例如

 rescue_from StandardError, :with => :render_error rescue_from Mongoid::Errors::DocumentNotFound, :with => :render_not_found rescue_from ActionController::RoutingError, :with => :render_not_found rescue_from ActionController::UnknownController, :with => :render_not_found rescue_from AbstractController::ActionNotFound, :with => :render_not_found rescue_from CanCan::AccessDenied do |exception| redirect_to main_app.root_url, :alert => exception.message end 

注意:您可能希望用StandardError替换genericsException。