2009-07-01 7 views
8

Voici une classe que je l'habitude d'avoirY compris les modules dans une classe et l'exécution du code

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

    validates :name 
    validates :date 

end 

j'ai maintenant plusieurs objets qui utilisent les mêmes fonctionnalités, et pire encore, plusieurs objets qui définissent des choses semblables, comme ceci:

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

    validates :age 

end 

Je veux «réutilisation du contenu de ces classes, donc je les transforme en modules:

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 

Et je peux maintenant créer une classe

class ADualClass 
    include Something 
    include Anotherthing 
end 

Le problème que j'ai est que la méthode Valide ne sont pas appelés lorsque je crée un objet ADualClass ... Il semble que le « valident: chose » est jamais appelée. Pourquoi donc? Comment puis-je forcer cela?

Répondre

14

Dans votre module, vous devez définir, par ex.

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