从路由错误轨道3.1救援

时间:2012-03-15 15:12:48

标签: ruby-on-rails ruby actioncontroller

如何从rails 3.1应用程序中的RoutingError进行救援。如果我错了,可以在应用程序控制器中使用rescue_from RoutingError,但现在不可能。

3 个答案:

答案 0 :(得分:7)

没有好办法处理它,但有一些解决方法。讨论here产生了以下建议:

<强>路线

将以下内容添加到路线文件中:

match "*", :to => "home#routing_error"

并处理此操作中的错误:

def routing_error
  render text: "Not found, sorry", status: :not_found
end

答案 1 :(得分:7)

我无法复制@ matthew-savage的结果。但是,根据route globbing上的Rails指南和另一个StackOverflow问题上的this question,我解决了这个问题:

的routes.rb

match "*gibberish", :to => "home#routing_error"

注意我是如何在通配符后包含文本的。控制器很好,如上所示:

控制器/ home_controller.rb

....
def routing_error
    render text: "Not found, sorry", status: :not_found
end

答案 2 :(得分:0)

example

<强> route.rb

  • Rails 3:

    match '*unmatched_route', :to => 'application#raise_not_found!'

  • Rails 4:

    get '*unmatched_route' => 'application#raise_not_found!'

<强> application_controller.rb

def raise_not_found!
  raise ActionController::RoutingError.new("No route matches #{params[:unmatched_route]}")
end