我正在开发一个 Rails 应用程序。在我的应用程序中,如果我在地址栏 / 中手动输入自定义路由作为config/routes.rb中不存在的 URL ,它将显示以下给定的错误消息。
路由错误
没有路线匹配“/clientImage/blablahblah”
我希望将其重定向到用户有意/无意给出的所有错误路线的正确显示。任何帮助将不胜感激。
我正在开发一个 Rails 应用程序。在我的应用程序中,如果我在地址栏 / 中手动输入自定义路由作为config/routes.rb中不存在的 URL ,它将显示以下给定的错误消息。
路由错误
没有路线匹配“/clientImage/blablahblah”
我希望将其重定向到用户有意/无意给出的所有错误路线的正确显示。任何帮助将不胜感激。
当有人输入不受支持的 url 时,Rails 将引发 ActionController::RoutingError。您可以挽救此错误并呈现 404 Not Found html。
为此,Rails 提供了一些特殊的函数,称为rescue_from 。
class ApplicationController < ActionController::Base
rescue_from ActionController::RoutingError, :with => :render_not_found
rescue_from StandardError, :with => :render_server_error
protected
def render_not_found
render "shared/404", :status => 404
end
def render_server_error
render "shared/500", :status => 500
end
end
把你的 404.html、500.html 放到 app/views/shared
Yourapp::Application.routes.draw do
#Last route in routes.rb
match '*a', :to => 'errors#routing'
end
“a”实际上是 Rails 3 Route Globbing 技术中的一个参数。例如,如果您的 url 是 /this-url-does-not-exist,则 params[:a] 等于“/this-url-does-not-exist”。因此,在处理这条流氓路线时,请尽可能发挥创造力。
在 app/controllers/errors_controller.rb
class ErrorsController < ApplicationController
def routing
render :file => "#{Rails.root}/public/404.html", :status => 404, :layout => false
end
end