查看ActiveModel::Validations的rails源代码,底层模型中包含和扩展了HelperMethods模块:
module Validations
extend ActiveSupport::Concern
included do
extend ActiveModel::Callbacks
extend ActiveModel::Translation
extend HelperMethods
include HelperMethods
...理论上,这不仅允许您将像validates_presence_of这样的助手方法调用为类宏(如所有标准示例中所示),而且还可以在模型实例上直接调用这些助手方法:
myobject.validates_presence_of :name在自定义验证器的上下文中,我可以看到这种方法是有用的,它希望利用一些现有的助手方法:
class CustomValidator < ActiveModel::Validator
def validate(record)
record.validates_presence_of :name
record.validates_acceptance_of :terms
...
end
end不管这是否是鼓励的行为,直到Rails 4.1中的特定验证器发生一些更改之后,它才能正常工作。因此,我的问题是,如果rails不支持以这种方式调用这些助手方法(作为模型上的实例方法),为什么它们包含在模型中而不是只是扩展呢?
发布于 2014-02-20 22:57:15
因此,根据大约4年前的提交,确实打算使这些验证助手既可以从类调用,也可以从实例调用:
https://github.com/rails/rails/commit/9131a88bb8e82f139ec49b4057fb6065ba0a2c6a
我正在评估4.1中所做的更改,以了解如何使这些受影响的验证方法再次工作。
https://stackoverflow.com/questions/21899619
复制相似问题