2

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

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

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

4

2 回答 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在你想登录的模型中。

于 2013-07-22T21:03:17.057 回答
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
于 2013-07-22T20:34:03.287 回答