在模型实例上使用ActiveModel Validations HelperMethods?

时间:2014-02-20 06:09:33

标签: 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 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不支持以这种方式调用这些辅助方法(作为模型上的实例方法),为什么它们包含在模型中而不是仅仅扩展?

1 个答案:

答案 0 :(得分:0)

所以根据大约4年前的这个提交,确实有意让这些验证助手从类和实例中调用:

https://github.com/rails/rails/commit/9131a88bb8e82f139ec49b4057fb6065ba0a2c6a

我正在评估4.1中所做的更改,以了解如何让这些受影响的验证方法再次运行。