我有一个Ruby on Rails应用程序,其中验证失败,我的一个模型。对于验证可能失败的地方,代码库有不同的入口点。我很想搞清楚它来自哪里。由于它是一种简单的验证方法,因此不存在任何异常,我只是从方法返回false并且保存失败。红宝石无异常返回
当前是否可以记录回溯以找出此验证来自哪个服务/路线,以便我可以看到是什么导致状态为此对象更改以便验证失败?
我有一个Ruby on Rails应用程序,其中验证失败,我的一个模型。对于验证可能失败的地方,代码库有不同的入口点。我很想搞清楚它来自哪里。由于它是一种简单的验证方法,因此不存在任何异常,我只是从方法返回false并且保存失败。红宝石无异常返回
当前是否可以记录回溯以找出此验证来自哪个服务/路线,以便我可以看到是什么导致状态为此对象更改以便验证失败?
你可以尝试caller()
:
def foo2
puts caller
end
def foo
foo2 #line5
end
foo #line 7
结果:
test.rb:5:in `foo'
test.rb:7:in `<main>'
我不确定是否有一个聪明的方法来做到这一点,但是这将完成工作。你甚至可以把它包装在一个漂亮的小函数中。我不确定是否抛出异常并拯救它们会影响性能,但是您可能不想在生产中这样做。
begin
throw
rescue
puts $!.backtrace
end