2009-07-07 4 views
5

J'ai créé un module personnalisé (qui définit actuellement seulement une nouvelle classe d'exception), et le mettre sous lib/lib_th.rbDéfinir exception personnalisée dans un module Rails

module LibTH 
    module Error 
     IDNotFound = Class.new 
    end 
end 

Je ne devrais pas avoir besoin d'exiger/inclure les module dans mon code, car il devrait être chargé automatiquement, car il suit les règles de nommage classiques.

Mais quand je tente de soulever l'exception IDNotFound quelque part dans mon code:

res.size == 0 ? raise LibTH::Error::IDNotFound : res 

Je reçois l'erreur follwoing:

SyntaxError (/Users/lrnz/code/ruby/corinna/app/models/treasure_hunt.rb:49: syntax error, unexpected tCONSTANT, expecting kDO or '{' or '(' 
    res.size == 0 ? raise LibTH::Error::IDNotFound : res 
          ^
/Users/lrnz/code/ruby/corinna/app/models/treasure_hunt.rb:49: syntax error, unexpected ':' 
    res.size == 0 ? raise LibTH::Error::IDNotFound : res 
                ^): 
app/controllers/treasure_hunts_controller.rb:50:in `show' 

La chose étrange est que je ne rencontre pas de problèmes en essayant de soulever l'exception dans script/console:

>> raise LibTH::Error::IDNotFound 
LibTH::Error::IDNotFound: LibTH::Error::IDNotFound 
from (irb):70 

nks!

Répondre

2

de Nevermind, je me résolu le problème:

au lieu d'utiliser la déclaration if ? then : else, j'élargissions en:

raise LibTH::Error::IDNotFound if res.size == 0 
res 

Il semble que vous ne pouvez pas utiliser une valeur constante (en classe nom) dans l'instruction C comme if, donc le:

syntax error, unexpected tCONSTANT, expecting kDO or '{' or '(' 

Merci asy!

2

La constante n'est pas un problème, vous avez juste une erreur de syntaxe avec l'augmentation. Si vous l'avez changé pour:

res.size == 0 ? (raise LibTH::Error::IDNotFound) : res 

Cela fonctionnerait. Le formulaire que vous avez corrigé est meilleur quand même.

Questions connexes