是否可以設置系統範圍驗證回調?系統範圍驗證回調
我想爲任何模型中發生的每個驗證失敗都寫一個記錄器。此回調不應改變模型中設置的任何其他回調的行爲。
我需要它爲我的客戶提供更快的支持,我的想法是記錄所有驗證錯誤,以便支持團隊能夠更快地找出正在發生的事情。
是否可以設置系統範圍驗證回調?系統範圍驗證回調
我想爲任何模型中發生的每個驗證失敗都寫一個記錄器。此回調不應改變模型中設置的任何其他回調的行爲。
我需要它爲我的客戶提供更快的支持,我的想法是記錄所有驗證錯誤,以便支持團隊能夠更快地找出正在發生的事情。
雖然@ MurifoX的答案可能有一些配置,我更喜歡以避免繼承自ActiveRecord :: Base的可能的情況下工作。由於SuperModel繼承自ActiveRecord :: Base,它可能看起來像它的一個實際模型,它在數據庫端有一個表示,而它只存在於繼承。
在我看來,一個更好的解決您的問題將是Ruby Mixins:
# lib/validation_logger.rb
module ValidationLogger
def self.included(base)
base.class_eval do
after_validation :log_validation
end
end
def log_validation
#custom log here
end
end
現在你應該include ValidationLogger
中的模型,你想記錄。
也許使所有模型都繼承自一個繼承自ActiveRecord::Base
的公共超級模型。
def FirstModel < SuperModel
end
def SecondModel < SuperModel
end
def ThirdModel < SuperModel
end
然後,你把你的回調在超級模式:
def SuperModel < ActiveRecord::Base
after_validation :do_your_thing
def do_your_thing
# stuff
end
end
是的,你的答案有點優雅。雖然兩者都在實踐中工作。 =] – MurifoX
謝謝:)正如我所說你的答案將完美工作,但我更喜歡避免從ActiveRecord :: Base繼承,如果可能的話。 –