我在ApplicationController类中有自定义错误处理代码:
unless ActionController::Base.config.consider_all_requests_local
rescue_from Exception, :with => :render_error
rescue_from ActiveRecord::RecordNotFound, :with => :render_not_found
rescue_from ActionController::RoutingError, :with => :render_not_found
rescue_from ActionController::UnknownController, :with => :render_not_found
end
但是,如果我输入一个捣碎的无效网址,例如:' / we / efe / qwe / wqeqw / qwe'带有config.consider_all_requests_local = false
的系统为我提供了标准的Rails 404页面,而不是被以下内容捕获:
rescue_from ActionController :: RoutingError,:with => :render_not_found
查看异常跟踪日志,显示Rails正在引发ActionController::RoutingError (No route matches [GET] "/we/efe/qwe/wqeqw/qwe"):
但是,我无法确定为什么它没有被我的处理程序捕获。
为什么这不起作用?
答案 0 :(得分:2)
显然它是Rails 3.2+引发ActionController :: RoutingError异常的方式。
答案是您需要在路由底部添加一个默认的命名路由,以捕获所有未路由的请求:
get '*unmatched_route', :to => 'application#no_route'