Ruby on rails 自定义错误页-Ruby on Rails
我正在尝试在我的网站中设置自定义错误页。我是在遵守指导方针 它在控制器存在但id不存在的情况下工作。例如,我有一个博客控制器,id 4不存在。它显示自定义错误页面 但在控制器本身不存在的情况下,它并不存在。例如,如果我键入某个带有数字id的随机控制器,则不会被我在应用程序控制器中设置的方法捕获,以重新路由自定义错误页。在这种情况下,我得到一个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附带的默认
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的答案