2010-07-14 7 views
0

quelqu'un pourrait-il expliquer le code dans catch_exceptions?ruby ​​sur rails 3 question

J'ai des difficultés à comprendre.

grâce

class ApplicationController < ActionController::Base 
    around_filter :catch_exceptions 

    private 

    def catch_exceptions 
    yield 
    rescue => exception 
    logger.debug "Caught exception! #{exception}" 
    raise 
    end 
end 

Répondre

4

simple.

Vous devez d'abord comprendre le concept du around_filter. Il met quelque chose autour d'un appel de méthode. Vous devez également comprendre le RENDEMENT, c'est-à-dire l'exécution d'un bloc. Donc, si vous avez quelque chose comme une action d'index.

def index 
    # run code run 
end 

qui signifie qu'il sera envoyé en bloc à cette around_filter, qui exécutera que, tout comme si elle était ...

def catch_exceptions 
    def index 
     #run code run 
    end 
    rescue => exception 
    logger.debug "Caught exception! #{exception}" 
    raise 
    end 
1

catch_exceptions est une méthode qui prend un bloc. Vous pouvez le dire car il contient un rendement (qui exécute le bloc passé).

La méthode intercepte toutes les exceptions se produisant dans ce bloc, les enregistrant, puis les relançant pour que d'autres codes puissent les attraper.

La ligne 'around_filter' fait passer les rails à la place de chaque méthode de contrôleur qui serait exécutée par la méthode catch_exceptions.

Le résultat global est que toutes les exceptions levées par les méthodes du contrôleur sont consignées.