包含在模块中的自定义验证将不会加载

时间:2010-09-07 23:22:26

标签: ruby-on-rails module validation

我试图通过一个模块在许多模型中包含一个自定义验证,我看到了一些奇怪的行为。我编写了一个名为validates_as_unique的自定义验证,它检查数据库中的记录中是否有一组属性是唯一的。在名为 FactBehaviors 的模块中,我有:

module FactBehaviors
  def self.included(base)
    base.class_eval do
      def self.acts_as_fact
        extend ClassMethods
        include InstanceMethods
      end
    end
  end

  module ClassMethods
    ...
  end

  module InstanceMethods
    def self.included(base)
      if base.respond_to?(:validate_as_unique)
        base.send(:validates_as_unique)
      end
    end
    ...
  end
end

当我启动控制台并创建一个新的有效记录(类型为事实)然后创建另一个相同的记录时,奇怪的存在。验证通过(无法正常工作)。但是,如果我重新加载!并尝试再次创建相同的记录,验证工作,并禁止我创建相同的记录。

对于rails加载类的方式我仍然有点模糊,但我觉得这种无知可能是问题所在。想法?

1 个答案:

答案 0 :(得分:0)

您必须扩展ActiveRecord才能添加此模块:

的ActiveRecord :: Base.extend(FactBehaviors)

使用它。