2009-07-07 2 views
5

Ho creato un modulo personalizzato (che attualmente definisce solo una nuova classe Exception), e metterlo sotto lib/lib_th.rbDefinizione eccezione personalizzata in un modulo in Rails

module LibTH 
    module Error 
     IDNotFound = Class.new 
    end 
end 

non avrei bisogno di richiedere/includere la modulo nel mio codice, in quanto dovrebbe essere caricato automaticamente, poiché segue le convenzionali regole di denominazione.

ma quando provo e sollevare l'eccezione IDNotFound da qualche parte nel mio codice:

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

ottengo l'errore 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 cosa strana è che ho incontrato nessun problema cercando di raccogliere l'eccezione in script/console:

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

Tha NKS!

risposta

2

Nevermind, ho risolto il problema io stesso:

invece di utilizzare l'istruzione if ? then : else, ho ampliato in una:

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

Sembra che non è possibile utilizzare un valore costante (come classe nome) nel if dichiarazione C-like, così il:

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

Grazie asy!

2

La costante non è un problema, hai solo un errore di sintassi con il rilancio. Se lo hai cambiato in:

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

Funzionerebbe. Il modulo che hai corretto è comunque migliore, comunque.