2012-08-10 63 views
8

我有一个Ruby on Rails应用程序,其中验证失败,我的一个模型。对于验证可能失败的地方,代码库有不同的入口点。我很想搞清楚它来自哪里。由于它是一种简单的验证方法,因此不存在任何异常,我只是从方法返回false并且保存失败。红宝石无异常返回

当前是否可以记录回溯以找出此验证来自哪个服务/路线,以便我可以看到是什么导致状态为此对象更改以便验证失败?

回答

15

你可以尝试caller()

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

结果:

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

我不确定是否有一个聪明的方法来做到这一点,但是这将完成工作。你甚至可以把它包装在一个漂亮的小函数中。我不确定是否抛出异常并拯救它们会影响性能,但是您可能不想在生产中这样做。

begin 
    throw 
rescue 
    puts $!.backtrace 
end