2009-07-01 3 views
8

Ecco una classe che ho usato per avereinclusi i moduli in una classe e l'esecuzione di codice

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

    validates :name 
    validates :date 

end 

ora ho diversi oggetti che utilizzano le stesse funzionalità, e peggio, molti oggetti che sono definendo cose simili, in questo modo:

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

    validates :age 

end 

voglio 'riutilizzo' il contenuto di queste classi, così li ho girato in moduli:

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 

E ora posso creare una classe

class ADualClass 
    include Something 
    include Anotherthing 
end 

Il problema che ho è che il metodo Convalida non sono chiamati quando creo un oggetto ADualClass ... Sembra che la "convalida: cosa" non viene mai chiamato. Perché? Come posso forzare questo?

risposta

14

Nel modulo è necessario definire, ad es.

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