2012-08-10 98 views
8

我有一個Ruby on Rails應用程序,其中驗證失敗,我的一個模型。對於驗證可能失敗的地方,代碼庫有不同的入口點。我很想搞清楚它來自哪裏。由於它是一種簡單的驗證方法,因此不存在任何異常,我只是從方法返回false並且保存失敗。紅寶石無異常返回

當前是否可以記錄回溯以找出此驗證來自哪個服務/路線,以便我可以看到是什麼導致狀態爲此對象更改以便驗證失敗?

回答

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

我不確定是否有一個聰明的方法來做到這一點,但是這將完成工作。你甚至可以把它包裝在一個漂亮的小函數中。我不確定是否拋出異常並拯救它們會影響性能,但是您可能不想在生產中這樣做。

begin 
    throw 
rescue 
    puts $!.backtrace 
end