我试图通过一个模块在许多模型中包含一个自定义验证,我看到了一些奇怪的行为。我编写了一个名为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加载类的方式我仍然有点模糊,但我觉得这种无知可能是问题所在。想法?
答案 0 :(得分:0)
您必须扩展ActiveRecord才能添加此模块:
的ActiveRecord :: Base.extend(FactBehaviors)
使用它。