Ruby无异常地获得回溯

时间:2012-08-10 18:00:46

标签: ruby-on-rails ruby

我有一个Ruby on Rails应用程序,其中一个模型的验证失败。代码库中有不同的入口点,用于验证失败的位置。我有兴趣弄清楚它来自哪里。因为它是一个简单的验证方法,所以没有涉及任何异常,我只是从方法返回false并且保存失败。

目前是否可以记录回溯以确定此验证源自哪个服务/路由,以便我可以看到是什么导致该对象的状态发生变化以使其无法通过验证?

2 个答案:

答案 0 :(得分: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 :(得分:1)

我不确定这是一个聪明的方法,但这将完成工作。你甚至可以将它包装在一个漂亮的小功能中。我不确定抛出异常并拯救它们会影响性能,但你可能不希望在生产中做这样的事情。

begin
  throw
rescue
  puts $!.backtrace
end