Ruby on rails 在模型实例上使用ActiveModel验证帮助方法?
查看ActiveModel::Validations的rails源代码,HelperMethods模块在基础模型中包括并扩展:Ruby on rails 在模型实例上使用ActiveModel验证帮助方法?,ruby-on-rails,validation,activemodel,Ruby On Rails,Validation,Activemodel,查看ActiveModel::Validations的rails源代码,HelperMethods模块在基础模型中包括并扩展: module Validations extend ActiveSupport::Concern included do extend ActiveModel::Callbacks extend ActiveModel::Translation extend HelperMethods include HelperMetho
module Validations
extend ActiveSupport::Concern
included do
extend ActiveModel::Callbacks
extend ActiveModel::Translation
extend HelperMethods
include HelperMethods
...
从理论上讲,这不仅允许您调用助手方法,如将
验证为类宏(如所有标准示例所示),还允许您直接在模型实例上调用这些助手方法:
myobject.validates_presence_of :name
我认为这在一个想要利用一些现有帮助器方法的自定义验证器的上下文中是有用的:
class CustomValidator < ActiveModel::Validator
def validate(record)
record.validates_presence_of :name
record.validates_acceptance_of :terms
...
end
end
class CustomValidator
无论这种行为是否受到鼓励,在Rails4.1中对特定的验证器进行了一些更改之前,它似乎是有效的。所以我的问题是,如果rails不支持以这种方式调用这些helper方法(作为模型上的实例方法),为什么它们被包括在模型中而不是仅仅被扩展?那么根据大约4年前的提交,确实,我们打算让这些验证帮助程序可以从类和实例调用:
myobject.validates_presence_of :name
我正在评估4.1中所做的更改,以了解如何使这些受影响的验证方法重新工作