2009-08-24 8 views

Répondre

12

Vous pouvez gérer les exceptions n'importe où dans une application rails, car elle fait partie de Ruby et ne fait pas partie de Rails. Où que vous voulez attraper des erreurs, juste envelopper comme si:

begin 
    SomethingElse.doSomething(x, y) 
rescue Exception 
    ErrorLogger.log(Time.now, "Something went wrong!") 
end 

S'il vous plaît noter que vous devez toujours « sauver l'exception » au lieu de « sauvetage ». Le simple fait d'utiliser "rescue" n'atteindra que StandardError, qui est une sous-classe de Exception (ce qui signifie que quelque chose pourrait passer à travers ce que vous ne voulez pas traverser).

De plus, comme d'habitude, vous pouvez élevez une exception en faisant:

raise ArgumentError, "Illegal arguments!" 

partout dans votre code, que ce soit un modèle ou d'un contrôleur.

+2

Petite correction: Vous avez un double 'raise' dans votre second fragment de code. Bonne réponse cependant. – Shadwell

+0

Ce n'est pas une erreur de syntaxe ou une double augmentation. Voir ici: http://web.njit.edu/all_topics/Prog_Lang_Docs/html/ruby/syntax.html#raise –

+2

En général, je suis d'accord, mais je ne suis pas d'accord avec votre premier bloc de code. Vous ne devez pas utiliser "Exception de secours" directement, car cela sauvera même les signaux qui tentent de tuer le processus. Sauf si vous êtes vraiment sûr que vous voulez que cette portion de code soit immunisée contre une mort propre, respectez le comportement par défaut de Ruby pour une bonne raison. Ainsi, il est généralement préférable d'utiliser un «rescue» de vanille et de faire en sorte que vos classes d'erreurs personnalisées dérivent de StandardError. – nertzy

1

À moins que je ne me trompe, vous pouvez utiliser la gestion des erreurs n'importe où dans Ruby. Qu'essayez-vous de faire?

Questions connexes