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