Rails - 处理异常

时间:2012-06-21 13:03:32

标签: ruby-on-rails ruby-on-rails-3 routes

我知道如何处理RecordNotFound

的错误

但是如何处理路由错误(没有路由匹配[GET])?

本主题中的PS我找不到答案 - Rails - how to handle routes that don't exist ("No route matches [GET]")?

2 个答案:

答案 0 :(得分:6)

处理路由(以及所有其他路由)的另一种方法是在ApplicationController中添加以下内容:

unless Rails.application.config.consider_all_requests_local
  rescue_from Exception do |e|
    render_500 e
  end
  rescue_from ActionController::RoutingError, with: :render_404
  rescue_from ActionController::UnknownController, with: :render_404
  rescue_from ActionController::UnknownAction, with: :render_404
  rescue_from ActiveRecord::RecordNotFound, with: :render_404
end

然后确保定义render_500render_404,以便它们实际呈现某些内容。在我的应用程序中,我已经完成了:

def render_404(exception)
  @not_found_path = exception.message
  respond_to do |format|
    format.html { render template: 'errors/error_404', layout: 'layouts/application', status: 404 }
    format.all { render nothing: true, status: 404 }
  end
end

然后在errors/error_404中创建了一个模板。这样它就可以处理所有路由错误并仍然使用我的应用程序布局。

您可以使用@not_found_path向用户显示错误。

答案 1 :(得分:3)

在你config/routes.rb中的每一条路线之后,添加以下行:

match '*url' => 'errors#routing'

然后创建一个名为ErrorsController的控制器并添加routing操作,您可以使用params[:url]来了解导致404的URL。

顺便说一句,这是查看您的网站是否有死链接的好方法。

希望它有所帮助!