2014-04-21 13 views
6

工作使用Rails 4,我不能讓rescue_fromActionController::BadRequest工作:rescue_from不是的ActionController ::錯誤請求

application_controller.rb

rescue_from ActionController::BadRequest, with: :raise_bad_request 

    def raise_bad_request 
    render(nothing: true, status: 404) 
    end 
+0

添加此中間件你:

如果你寫了自己的中間件這樣你就可以處理這樣的錯誤有其他rescue_from語句?訂單很重要。 –

+0

我是這樣做的,但我不確定我的理解如何?我有3:rescue_from ActionDispatch :: RemoteIp :: IpSpoofAttackError,與::ip_spoof_error rescue_from ActionController :: UnknownFormat,與::raise_not_found rescue_from ActionController :: BadRequest,與::raise_not_found –

+0

同樣的問題在這裏,無法解決它。 .. – Dorian

回答

7

內部控制器,你可以使用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' 
+1

謝謝,我無法弄清楚爲什麼我無法拯救ActionController :: UrlGenerationError,直到我找到這篇文章。很高興知道事情如何運作,謝謝。 – stephenmurdoch