rescue_from不使用ActionController :: BadRequest

Tom*_*ssi 7 ruby-on-rails ruby-on-rails-4

使用Rails 4,我无法rescue_from使用ActionController::BadRequest:

application_controller.rb

  rescue_from ActionController::BadRequest, with: :raise_bad_request

  def raise_bad_request
    render(nothing: true, status: 404)
  end
Run Code Online (Sandbox Code Playgroud)

Mik*_*iet 11

在控制器内部,您只能使用rescue_from控制器内部引发的错误(在操作,视图或过滤器中).

ActionController::BadRequest在路由将请求传递给控制器​​(中间件堆栈中的某个位置)之前,它看起来像是加注.

如果您编写自己的中间件,可以处理此类错误:

class HandleErrorsMiddleware

  def initialize(app)
    @app = app
  end

  def call(env)
    @app.call(env)
  rescue ActionController::BadRequest
    ApplicationController.action(:raise_bad_request).call(env)
  end
end
Run Code Online (Sandbox Code Playgroud)

raise_bad_request 应该是公共方法 ApplicationController

你应该添加这个中间件 config/application.rb

config.middleware.insert_before 'ActionDispatch::ParamsParser', 'HandleErrorsMiddleware' 
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,我无法弄清楚为什么我在找到这篇文章之前遇到了解救ActionController :: UrlGenerationError的问题.很高兴知道事情是如何运作的,谢谢. (2认同)