2010-06-10 2 views

Répondre

1

Votre question n'est pas claire. Par "modèles", vous voulez dire des modèles soutenus par une base de données qui utilisent ActiveRecord, n'est-ce pas?

Habituellement, la validation n'est pas un "fichier", mais une série d'instructions dans le fichier du modèle. Idem pour les déclarations de relation.

Vous pouvez diviser le contenu d'un modèle entre n'importe quel nombre de fichiers. La technique varie selon que vous souhaitez que les autres fichiers contiennent des méthodes d'instance ou des méthodes de classe.

Le plus simple est d'avoir des méthodes d'instance dans d'autres fichiers. Par exemple,

# file foo.rb 
class Foo < ActiveRecord::Base 
    include FooMethods 

    # --- callbacks --- # 
    before_create :record_signup # "before_create" is a "callback". 
    # See http://api.rubyonrails.org/classes/ActiveRecord/Callbacks.html 
    # note that the method could also be from a different class altogether: 
    before_save  EncryptionWrapper.new 
    # See section "Types of callbacks" in the api url referred to above 

    # --- relationships --- # 
    belongs_to :foobar 
    has_many :bars 

    # --- Class Methods --- # 
    def Foo.a_method_name(id) 
    ... 
    end 
end 

~~~~~~~~~~~~~~~~~~~~~~~~~~~ 

# file foo_methods.rb 

module FooMethods 

    def method1 
    ... 
    end 

    def method2 
    ... 
    end 

    private 

    def record_signup # define the callback method 
    self.signed_up_on = Date.today 
    end 
end 

Spontanément, je ne sais pas comment mettre la commande prioritaire de rappel

de before_create

dans un autre fichier que principal fichier de classe du modèle. Ce ne serait pas difficile à comprendre. Mais peu importe qu'il soit facile de mettre dans un fichier différent, je ne le recommanderais pas du point de vue de la clarté du code.

+0

Merci larry pour la réponse rapide .. Puis-je ajouter des méthodes before_validation, after_save, after_create dans le module? et est-ce le travail si j'ai simplement inclure ce module dans ma classe ?? car cela fonctionne comme des choses qui travaillent ensemble dans une classe. –

+0

# fichier foo.rb classe Foo

+0

@krunal, votre commentaire est entouré de lignes et illisible. Je suggère que vous l'ajoutiez à votre q d'origine précédé par "Ajouté" ou un tel. En outre, n'oubliez pas d'upvote réponses qui sont utiles et marquer comme "répondu" celui qui résout votre problème. Re: Chargement: aucune différence importante si avoir plusieurs fichiers source est d'une aide réelle pour vous. Re: before_validation etc, voir la mise à jour –

Questions connexes