自定义错误页面 – Ruby on Rails

我正在尝试在我的网站中设置自定义错误页面。 我遵循PerfectLine Blog的指导原则。

它适用于控制器存在的情况,但id不存在。 例如,我有一个博客控制器,id 4不存在。 它显示自定义错误页面

但在控制器本身不存在的情况下它不存在。 例如,如果我键入一些带有数字ID的随机控制器,则不会被我在应用程序控制器中设置的方法捕获,以重新路由自定义错误页面。 在这种情况下,我得到一个

ActionController::RoutingError (No route matches "/randomcontrollername"):

在终端和rails附带的默认错误页面中。

application_controller.rb

 class ApplicationController  :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 rescue_from ActionController::UnknownAction, :with => :render_not_found end private def render_not_found(exception) render :template => "/error/404.html.erb", :status => 404 end def render_error(exception) render :template => "/error/500.html.erb", :status => 500 end end 

请你帮助我好吗。 谢谢。

您可以使用rails中的路由globbing来执行此操作,它允许您使用通配符将任何操作与路径的任何部分进行匹配。

要捕获所有剩余路由,只需将低优先级路由映射定义为config/routes.rb的最后一个路由:

在Rails 3中: match "*path" => 'error#handle404'

在Rails 2中: map.connect "*path", :controller => 'error', :action => 'handle404'

params[:path]将包含匹配的部分。

如果您不需要动态错误页面,只需编辑public/404.htmlpublic/505.html 。 如果你这样做,请参阅Reza.mp的回答。