2012-08-10 17 views
8

Tengo una aplicación Ruby on Rails donde falla la validación de uno de mis modelos. Existen diferentes puntos de entrada en la base de códigos para donde esta validación podría fallar. Estoy interesado en averiguar de dónde viene. Dado que es un método de validación simple, no hay excepciones involucradas, simplemente devuelvo falso del método y el guardado falla.Ruby get backtrace sin excepción

¿Es posible actualmente también registrar la traza inversa para averiguar de qué servicio/ruta se originó esta validación para que pueda ver qué causó que el estado cambie para este objeto para que no valide?

Respuesta

15

Usted podría intentar caller():

def foo2 
    puts caller 
end 
def foo 
    foo2 #line5 
end 
foo  #line 7 

Resultado:

test.rb:5:in `foo' 
test.rb:7:in `<main>' 
1

No estoy seguro de una forma inteligente de hacerlo, pero esto hará el trabajo. Podrías envolverlo en una pequeña y agradable función incluso. No estoy seguro si lanzar excepciones y rescatarlas afectará el rendimiento, pero probablemente no quieras hacer algo como esto en producción.

begin 
    throw 
rescue 
    puts $!.backtrace 
end 
Cuestiones relacionadas