2011-07-26 34 views
1

坦率地說,我知道在標題中代表什麼可能是不可能的,但我無法想出更好的東西。Ruby on Rails:從模型中傳遞異常對象

我的問題是,我沒有使用ActiveRecord來獲取/保存數據,但通過webservice一些專用API。因此,我需要處理來自它的一些異常(例如發送郵件),但我想在模型中執行以避免代碼中的冗餘。到目前爲止,我提出的唯一想法是引發來自該web服務的某些響應的異常,以在應用程序控制器中生成適當的操作。不幸的是,我的一個行爲是發送電子郵件與請求和響應從webservice產生的錯誤。問題是,我如何將它們傳遞給控制器​​?

回答

0

一般來說,使用異常處理程序流程被認爲是不好的做法(但是這麼方便!= P)。

而不是試圖從模型明確指定轉移控制到所述控制器,如何使一個塊到模型中,並用屈服執行該塊。這樣,當模型希望運行時,可以從模型中執行控制器中的代碼。

hello = "hello" 
def func 
    goodbye = "goodbye" 
    yield 
end 

func {hello = "world"} 

puts goodbye 

NameError: undefined local variable or method `goodbye' for #<Object:0x7fa85b7322a0> 
    from (irb):25 
    from :0 

puts hello 
"world" 

下面是通過代碼轉換成一個函數,並且示出,該代碼塊仍然可以從呼叫者訪問變量(你好==「世界」,從調用者的堆棧空間內,但內部的從運行的一個例子功能)。我感覺更清潔。

再見那裏只是爲了表明,一旦函數結束,該函數中定義的變量得到彈出堆棧。