before_ *回調可以通過返回false來停止執行。如何溝通多個before_ *回調中的哪一個暫停執行
我有3個before_destroy模型回調,以停止銷燬幾個可能的原因。我想告訴用戶它是哪個原因,但是我會從模型中返回.destroy是錯誤的。如何從模型中發送消息,或者從控制器確定before_destroy回調是否暫停執行?
before_ *回調可以通過返回false來停止執行。如何溝通多個before_ *回調中的哪一個暫停執行
我有3個before_destroy模型回調,以停止銷燬幾個可能的原因。我想告訴用戶它是哪個原因,但是我會從模型中返回.destroy是錯誤的。如何從模型中發送消息,或者從控制器確定before_destroy回調是否暫停執行?
這是個不錯的問題。我不知道是否有一個好的方法來做到這一點。我唯一想到的就是使用錯誤[:base],但聽起來有點破解。
找到了答案。用途:
errors.add:my_key, '我的味精'
錯誤只是一個哈希,並能處理任意鍵。只要確保你沒有與你的屬性名稱衝突。
是的......這正是我所建議的;) – lucapette
這裏有幾個很好的答案 - 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
add_to_base被刪除,但我喜歡accessor的想法 – pixelearth
這並不聽起來像一個黑客在所有。我會認爲這是完全正確的方式來做到這一點。 –