2009-06-12 10 views
0

j'ai 10 modèles et 3 d'entre eux ont besoin de quelques méthodes personnalisées supplémentaires qui se trouvent être:ActiveRecord Modèles - Ajout de méthodes personnalisées

has_staged_version? 
apply_staged_version 
discard_staged_version 

Je veux définir ces méthodes une fois.

Je pourrais créer une sous-classe personnalisée d'ActiveRecord: Base, en définir les méthodes, et en faire hériter mes 3 modèles. Mais existe-t-il un moyen plus "Ruby/Rails" pour y parvenir?

Cheers

Répondre

4

Utilisez un module comme un mixin.

Voir http://www.juixe.com/techknow/index.php/2006/06/15/mixins-in-ruby/

par exemple

dans /lib ont

module StagedVersionStuff 

    def has_staged_version? 

    end 

    def apply_staged_version 

    end 

    def discard_staged_version 

    end 
end 

puis dans les modèles que vous voulez avoir ces méthodes que vous avez

include StagedVersionStuff 

après la déclaration Class

1

Vous pouvez créer un module et avoir votre les classes l'incluent:

module StagedVersionMethods 
    def has_staged_version? 
    end 

    def apply_staged_version 
    end 

    def discard_staged_version 
    end 
end 

Model.send :include, StagedVersionMethods 
+0

Merci beaucoup - c'est le genre de chose que je recherchais. – Paul

0

Que font vos classes? Le choix d'utiliser ou non une sous-classe ou un module est plus une question de sémantique sur la base de ce que les classes elles-mêmes sont.

Questions connexes