我有一个 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