2017-10-11 2 views
0

J'ai un exemple de code comme ceci:ActiveRecord :: RecordNotFound comme réponse la manipulation

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

Et lorsque je tente de mettre à jour dossier qui n'existe pas, dans d'autres mots contrôleur soulève ActiveRecord :: RecordNotFound. Je ne ai pas besoin de sauver et rendre quelque chose, que cette exception a son propre gestionnaire de réponse ou quelque chose, ce que je reçois dans la réponse lorsqu'il est fourni id valide à la méthode ci-dessus, capture d'écran postier:

enter image description here

est la version texte ici:

{ 
    "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!'" 
      }, 
      { 

Cependant quand j'ajoute ma propre classe de contrôleur, et je le soulève du modèle, je reçois 500 si je ne délivrerai spécifiquement, dans le contrôleur.

Comment cela est-il fait pour ActiveRecord :: RecordNotFound? Comment puis-je ajouter un gestionnaire de réponse à mon erreur personnalisée?

Répondre

0

Je vous suggère d'utiliser rescue_from dans votre ApplicationController:

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

Sinon, vous pouvez utiliser le exception_app, la mise comme ça dans config/application.rb:

config.exceptions_app = routes 

Vous pouvez alors contrôler le rendu de la erreurs à travers les routes:

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

Vous pouvez trouver plus de détails sur cet article de blog: Handling errors in Ruby on Rails