8

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

当前是否还可以记录回溯以找出此验证源自哪个服务/路由,以便我可以查看是什么导致该对象的状态更改以使其验证失败?

4

2 回答 2

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>'
于 2012-08-10T19:15:08.320 回答
1

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

begin
  throw
rescue
  puts $!.backtrace
end
于 2012-08-10T18:28:22.250 回答