系统范围的验证回调

时间:2013-05-29 21:18:52

标签: ruby-on-rails

是否可以设置系统范围的验证回调?

我想为任何模型中发生的每个验证失败编写一个记录器。此回调不应更改模型中设置的任何其他回调的行为。

我需要它来为我的客户提供更快的支持,我的想法是记录所有验证错误,以便支持团队能够更快地找出正在发生的事情。

2 个答案:

答案 0 :(得分: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您想要记录的模型。

答案 1 :(得分: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