是否可以设置系统范围验证回调?系统范围验证回调
我想为任何模型中发生的每个验证失败都写一个记录器。此回调不应改变模型中设置的任何其他回调的行为。
我需要它为我的客户提供更快的支持,我的想法是记录所有验证错误,以便支持团队能够更快地找出正在发生的事情。
是否可以设置系统范围验证回调?系统范围验证回调
我想为任何模型中发生的每个验证失败都写一个记录器。此回调不应改变模型中设置的任何其他回调的行为。
我需要它为我的客户提供更快的支持,我的想法是记录所有验证错误,以便支持团队能够更快地找出正在发生的事情。
虽然@ 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
中的模型,你想记录。
也许使所有模型都继承自一个继承自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
是的,你的答案有点优雅。虽然两者都在实践中工作。 =] – MurifoX
谢谢:)正如我所说你的答案将完美工作,但我更喜欢避免从ActiveRecord :: Base继承,如果可能的话。 –