rescue_from不使用ActionController :: BadRequest

时间:2014-04-21 14:27:47

标签: 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

1 个答案:

答案 0 :(得分:9)

在内部控制器中,您只能将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

raise_bad_request应该是ApplicationController

中的公共方法

您应该在config/application.rb

中添加此中间件
config.middleware.insert_before 'ActionDispatch::ParamsParser', 'HandleErrorsMiddleware'