2009-07-01 10 views
8

Aquí es una clase que solía tenerLa inclusión de módulos en una clase y la ejecución de código

class Something 
    # Defines the validates class methods, which is called upon instantiation 
    include Module 

    validates :name 
    validates :date 

end 

ahora tengo varios objetos que están utilizando las mismas funcionalidades, y peor aún, varios objetos que están definiendo cosas similares, de esta manera:

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

    validates :age 

end 

quiero 're-uso' el contenido de estas clases, por lo que les convirtió en módulos:

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 

Y ahora puedo crear una clase

class ADualClass 
    include Something 
    include Anotherthing 
end 

El problema que tengo es que el método valida no se llama cuando se crea un objeto ADualClass ... Parece que el "valida: cosa" nunca es llamado. ¿Porqué es eso? ¿Cómo puedo forzar esto?

Respuesta

14

En su módulo debe definir, p. Ej.

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