代码之家  ›  专栏  ›  技术社区  ›  Julien Genestoux

在类中包含模块并执行代码

  •  8
  • Julien Genestoux  · 技术社区  · 15 年前

    这是我以前上过的一门课

    class Something
        # Defines the validates class methods, which is called upon instantiation
        include Module
    
        validates :name
        validates :date
    
    end
    

    我现在有几个对象使用相同的功能,更糟的是,有几个对象定义了类似的东西,如:

    class Anotherthing
        # Defines the validates class methods,  which is called upon instantiation
        include Module
    
        validates :age
    
    end
    

    我想“重用”这些类的内容,因此我将它们转换为模块:

    module Something
        # Defines the validates class methods  which is called upon instantiation
        include Module
    
        validates :name
        validates :date
    
    end
    
    module Anotherthing
        # Defines the validates class methods which is called upon instantiation
        include Module
    
        validates :age
    
    end
    

    现在我可以创建一个类

    class ADualClass
       include Something
       include Anotherthing
    end
    

    我的问题是,当我创建一个ADualClass对象时,不会调用validates方法…似乎“验证:事物”从未被调用过。为什么会这样?我该怎么强制?

    1 回复  |  直到 15 年前
        1
  •  14
  •   alex.zherdev    15 年前

    在您的模块中,您需要定义,例如

    def self.included(base)
      base.validates :name
      base.validates :date
    end