2009-08-24 53 views

回答

12

您可以在Rails應用程序中的任何位置執行異常處理,因爲它是Ruby的一部分,而不是Rails的一部分。不管你想要捕捉錯誤,只是把它包裝成這樣:

begin 
    SomethingElse.doSomething(x, y) 
rescue Exception 
    ErrorLogger.log(Time.now, "Something went wrong!") 
end 

請注意,你應該總是「拯救例外」,而不僅僅是「救市」。僅僅使用「rescue」將只捕獲StandardError,它是Exception的一個子類(意思是你可能不想經歷的事情)。

而且像往常一樣,你可以做提高異常:

raise ArgumentError, "Illegal arguments!" 
在你的代碼

任何地方,無論是模型或控制器。

+2

小修正:您的第二個代碼片段中包含雙「raise」。雖然答案很好。 – Shadwell 2009-08-24 18:23:05

+0

這不是語法錯誤或雙重提升。看到這裏:http://web.njit.edu/all_topics/Prog_Lang_Docs/html/ruby/syntax.html#raise – 2009-08-24 20:41:54

+2

一般來說,我同意,但我不同意你的第一個代碼塊。 你不應該直接使用「救援例外」,因爲它甚至可以拯救嘗試殺死進程的信號。除非你真的確定你想讓這部分代碼免於被幹淨地殺死,否則堅持Ruby的默認行爲是有原因的。 因此,使用vanilla「rescue」通常是更好的做法,並且您的自定義錯誤類來自StandardError。 – nertzy 2009-09-14 23:03:03

1

除非我錯了,否則可以在Ruby中的任何地方使用錯誤處理。你想做什麼?