2013-05-29 79 views
2

是否可以設置系統範圍驗證回調?系統範圍驗證回調

我想爲任何模型中發生的每個驗證失敗都寫一個記錄器。此回調不應改變模型中設置的任何其他回調的行爲。

我需要它爲我的客戶提供更快的支持,我的想法是記錄所有驗證錯誤,以便支持團隊能夠更快地找出正在發生的事情。

回答

4

雖然@ 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中的模型,你想記錄。

+0

是的,你的答案有點優雅。雖然兩者都在實踐中工作。 =] – MurifoX

+0

謝謝:)正如我所說你的答案將完美工作,但我更喜歡避免從ActiveRecord :: Base繼承,如果可能的話。 –

0

也許使所有模型都繼承自一個繼承自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