2014-04-21 10 views
6

Mit Rails 4, kann ich nicht rescue_from bekommen mit ActionController::BadRequest zu arbeiten:rescue_from funktioniert nicht mit Action :: BadRequest

application_controller.rb

rescue_from ActionController::BadRequest, with: :raise_bad_request 

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

Sie Hast du andere rescue_from-Anweisungen? Auftragsangelegenheiten. –

+0

tue ich, aber ich bin mir nicht sicher, ich verstehe wie? Ich habe 3: rescue_from ActionDispatch :: RemoteIp :: IpSpoofAttackError, mit:: ip_spoof_error rescue_from ActionController :: UnknownFormat, mit:: raise_not_found rescue_from ActionController :: BadRequest, mit:: raise_not_found –

+0

Gleiches Problem hier, konnte es nicht lösen. .. – Dorian

Antwort

7

Innen-Controller Sie rescue_from verwenden können, nur für Fehler, die sich in Ihrem Controller (in Aktionen, Ansichten oder Filtern) ergeben.

Es sieht aus wie ActionController::BadRequest erhöht, bevor Routing Anforderungen an Controller (irgendwo in Middleware-Stack) übergibt.

können Sie solche Fehler bearbeiten, wenn Sie eigene Middleware wie folgt schreiben:

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 sollte in ApplicationController

öffentliche Methode sein

Sie sollten diese Middleware Sie in config/application.rb hinzufügen

config.middleware.insert_before 'ActionDispatch::ParamsParser', 'HandleErrorsMiddleware' 
+1

Danke, ich konnte nicht herausfinden, warum ich Probleme hatte, ActionController :: UrlGenerationError zu retten, bis ich diesen Artikel fand. Schön zu wissen, wie die Dinge funktionieren, danke. – stephenmurdoch

Verwandte Themen