2017-02-21 2 views
0

So möchte ich eine Fehlerseite rendern und eine Fehlermeldung in einem rescue_from Abschnitt in einem Rails-Controller übergeben. Momentan sieht es so aus:So rendern Sie eine Rails-Vorlage in einem Controller `rescue_from`

rescue_from ActiveSupport::MessageVerifier::InvalidSignature do 
    render json: { errors: I18n.t(:invalid_token, scope: :errors) }, status: :bad_request 
end 

Aber wir wollen json nicht mehr rendern. Wir möchten eine Rails-Vorlage rendern. Wie machen wir das, aber geben wir auch den errors Hash ein? Kann dies innerhalb einer rescue_from getan werden?

Antwort

0

Eine übliche Art zu reagieren, wenn es Fehler gibt ist durch eine exceptions_app für Ihre Anwendung verwenden, erstellen Sie zuerst eine Steuerung die Fehlerreaktionen zu dienen:

class ErrorsController < ApplicationController 
    def not_found 
    @details = "foo bar, something that happened in this request" 
    render status: 404 
    end 

    def internal_server_error 
    render status: 500 
    end 
end 

Sie Instanz Vars in der Steuerung zuweisen können, wie gewöhnliche Controller-Aktionen, hier können Sie eine Nachricht an den Benutzer erstellen oder sie bearbeiten, wie Sie möchten.

Dann können Sie einige Routen in Ihrem Router hinzufügen:

match "/404", to: "errors#not_found", via: :all 
match "/500", to "errors#internal_server_error", via: :all 

In Sie application.rb Datei hinzufügen:

config.exceptions_app = self.routes 

Und schließlich sollten Sie die 404.html und 500 zu entfernen. html in Ihrem öffentlichen Verzeichnis, wenn sie vorhanden sind.

HINWEIS:

Wenn Sie diese Seiten lokal während der Entwicklung sehen möchten, müssen Sie Ihre ändern müssen config/environments/development.rb:

config.consider_all_requests_local = false 
Verwandte Themen