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