0

我正在开发一个 Rails 应用程序。在我的应用程序中,如果我在地址栏 / 中手动输入自定义路由作为config/routes.rb中不存在的 URL ,它将显示以下给定的错误消息。

路由错误

没有路线匹配“/clientImage/blablahblah”

我希望将其重定向到用户有意/无意给出的所有错误路线的正确显示。任何帮助将不胜感激。

4

2 回答 2

3

当有人输入不受支持的 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

于 2013-01-25T11:52:46.167 回答
2
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
于 2013-01-25T11:03:27.430 回答