2013-05-29 48 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