2017-10-11 5 views
0

Ich habe ein Codebeispiel wie folgt aus:Active :: RecordNotFound wie Response-Handling

def update 
    if @transaction.update(transaction_params) 
    render :show, status: :ok 
    else 
    render json: @transaction.errors, status: :unprocessable_entity 
    end 
end 

Und wenn ich versuche Datensatz zu aktualisieren, die mit anderen Worten nicht existiert, Controller hebt Active :: RecordNotFound. Ich brauche nicht zu retten und alles zu machen, da diese Ausnahme seiner eigenen Antwort-Handler oder etwas hat, das ist, was ich in der Antwort zu erhalten, wenn sie über das Verfahren ungültig ID versehen, Postbote Screenshot:

enter image description here

Hier

ist Textversion:

{ 
    "status": 404, 
    "error": "Not Found", 
    "exception": "#<ActiveRecord::RecordNotFound: Couldn't find Transaction with 'id'=88 [WHERE \"transactions\".\"active\" = ?]>", 
    "traces": { 
     "Application Trace": [ 
      { 
       "id": 6, 
       "trace": "app/controllers/api/v1/transactions_controller.rb:42:in `set_transaction'" 
      } 
     ], 
     "Framework Trace": [ 
      { 
       "id": 0, 
       "trace": "vendor/bundle/gems/activerecord-5.1.4/lib/active_record/relation/finder_methods.rb:343:in `raise_record_not_found_exception!'" 
      }, 
      { 

Allerdings, wenn ich meine eigene Controller-Klasse hinzufügen, und ich hebe sie aus dem Modell, I 500, wenn ich nicht speziell sie retten kann, in der Steuerung.

Wie erfolgt dies für ActiveRecord :: RecordNotFound? Wie kann ich meinem benutzerdefinierten Fehler einen Antworthandler hinzufügen?

Antwort

0

Ich würde Sie rescue_from in Ihrem Application schlagen Gebrauch:

class ApplicationController 
    rescue_from MyOwnException do |exception| 
    render 'my_error_view' 
    end 
end 

Alternativ könnten Sie die exception_app verwenden, es so in config/application.rb Einstellung:

config.exceptions_app = routes 

Anschließend können Sie steuern die Wiedergabe von der Fehler durch die Routen:

match '/404', to: 'exceptions#handle_404' 

Sie können weitere Details in diesem Blogpost finden: Handling errors in Ruby on Rails

Verwandte Themen