Ruby on rails 自定义错误页-Ruby on Rails

Ruby on rails 自定义错误页-Ruby on Rails,ruby-on-rails,ruby,ruby-on-rails-3,custom-error-pages,Ruby On Rails,Ruby,Ruby On Rails 3,Custom Error Pages,我正在尝试在我的网站中设置自定义错误页。我是在遵守指导方针 它在控制器存在但id不存在的情况下工作。例如,我有一个博客控制器,id 4不存在。它显示自定义错误页面 但在控制器本身不存在的情况下,它并不存在。例如,如果我键入某个带有数字id的随机控制器,则不会被我在应用程序控制器中设置的方法捕获,以重新路由自定义错误页。在这种情况下,我得到一个 ActionController::RoutingError(没有路由匹配)/randomcontrollername”): 在终端和rails附带的默认

我正在尝试在我的网站中设置自定义错误页。我是在遵守指导方针

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

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

ActionController::RoutingError(没有路由匹配)/randomcontrollername”):

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

应用程序\u控制器.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
class ApplicationController:呈现\u错误
从ActiveRecord::RecordNotFound,:with=>:render\u未找到
从ActionController::RoutingError中营救\u,:with=>:未找到渲染\u
从ActionController::UnknownController中营救\u,:with=>:未找到渲染\u
从ActionController::UnknownAction中营救\u,:with=>:未找到渲染\u
结束
私有的
未找到def render_(异常)
呈现:template=>“/error/404.html.erb”,:status=>404
结束
def render_错误(异常)
render:template=>“/error/500.html.erb”,:status=>500
结束
结束

你能帮帮我吗。谢谢。

您可以使用rails中的route globbing实现这一点,它允许您使用通配符将任何操作匹配到路由的任何部分

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

在Rails 3中:
匹配“*path”=>“错误#handle404”

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


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

如果不需要动态错误页面,只需编辑
public/404.html
public/505.html
。如果有,请参阅Reza.mp的答案