自定义错误页面 - Ruby on Rails

fel*_*lix 10 ruby ruby-on-rails custom-error-pages ruby-on-rails-3

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

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

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

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

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

application_controller.rb

class ApplicationController < ActionController::Base
  protect_from_forgery

  unless Rails.application.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
    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
Run Code Online (Sandbox Code Playgroud)

请你帮助我好吗.谢谢.

Rez*_*emi 18

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

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

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

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

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