2011-08-24 36 views
1

before_ *回調可以通過返回false來停止執行。如何溝通多個before_ *回調中的哪一個暫停執行

我有3個before_destroy模型回調,以停止銷燬幾個可能的原因。我想告訴用戶它是哪個原因,但是我會從模型中返回.destroy是錯誤的。如何從模型中發送消息,或者從控制器確定before_destroy回調是否暫停執行?

回答

1

這是個不錯的問題。我不知道是否有一個好的方法來做到這一點。我唯一想到的就是使用錯誤[:base],但聽起來有點破解。

+1

這並不聽起來像一個黑客在所有。我會認爲這是完全正確的方式來做到這一點。 –

0

找到了答案。用途:

errors.add:my_key, '我的味精'

錯誤只是一個哈希,並能處理任意鍵。只要確保你沒有與你的屬性名稱衝突。

+0

是的......這正是我所建議的;) – lucapette

1

這裏有幾個很好的答案 - How do I 'validate' on destroy in rails

Basicly的解決方案將是

errors.add_to_base "Name of the error" 

OR

您可以在模型中定義attr_accessor並適當設置它們,甚至認爲我認爲這不是最乾的方式,因爲已經是對象具有應該保存錯誤的錯誤屬性散列。

EX是:

attr_accessor :before_save_error1 
attr_accessor :before_save_error2 
attr_accessor :before_save_error3 

before_destroy :check_for_errors 

def check_for_errors 
    error = false 
    if error1 # some condition here 
    self.before_save_error1 = true 
    error = true 
    elsif error2 # some condition here 
    self.before_save_error2 = true 
    error = true 
    elseif error3 # some condition here 
    self.before_save_error3 = true 
    error = true 
    end 

    error 
end 
+0

add_to_base被刪除,但我喜歡accessor的想法 – pixelearth