是否可以设置系统范围的验证回调?
我想为任何模型中发生的每个验证失败编写一个记录器。此回调不应更改模型中设置的任何其他回调的行为。
我需要它来为我的客户提供更快的支持,我的想法是记录所有验证错误,以便支持团队能够更快地找出正在发生的事情。
答案 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