2010-12-02 15 views
4

J'ai une gamme de méthodes qui utilisent la même gestion des exceptions. Comment puis-je faire abstraction de la vérification des exceptions dans une fonction distincte?Résumé de la vérification des exceptions

Voir l'exemple ci-dessous, merci beaucoup pour votre aide les gens!

def a 
    code 
    begin 
    rescue 1... 
    rescue 2... 
    rescue 3... 
    rescue 4... 
    end 
end 

def b 
    code 
    begin 
    rescue 1... 
    rescue 2... 
    rescue 3... 
    rescue 4... 
    end 
end 
+0

Est-ce pour le modèle, contrôleur ou autre chose? – hade

Répondre

10

La solution la plus simple serait de passer votre code à une méthode comme un bloc et y céder dans un begin/expression de sauvetage:

def run_code_and_handle_exceptions 
    begin 
    yield 
    rescue 1... 
    rescue 2... 
    rescue 3... 
    rescue 4... 
    end 
end 

# Elsewhere... 
def a 
    run_code_and_handle_exceptions do 
    code 
    end 
end 
# etc... 

Vous voudrez peut-être venir avec un plus succinct nom de la méthode que run_code_and_handle_exceptions!

1

Dans les contrôleurs, j'ai utilisé la fonction rescue_from. C'est assez DRY:

class HelloWorldController < ApplicationController 
    rescue_from ActiveRecord::RecordNotFound, :with => :handle_unfound_record 

    def handle_unfound_record 
    # Exception handling... 
    end