2010-08-23 6 views
0

Je ne suis pas sûr de ce que je fais mal ici, j'ai un fichier en lib/acts_as_votable.rb, c'est juste un système votable pour l'application.Chargement correct des modules ruby ​​dans Rails

module ActsAsVotable 

end 

module ActiveRecord 
    class Base 
    class << self 
     cattr_accessor :votable 

     def acts_as_votable 
     has_many :votes, :as => :voteable 
     end 

     def votable? 
     method_defined? :votes 
     end 
    end 

    def votable? 
     self.class.send(:method_defined?, :votes) 
    end 
    end 
end 

Mais il semble que le module ne charge jamais:

undefined local variable or method `acts_as_votable' for #<Class:0x00000101796d80> 

Quelle serait la bonne façon de charger des modules?

+0

Quelle est la version de rails que vous utilisez? –

+0

Je suis en cours d'exécution 1.9.2-tête –

+0

Rails 3, pour autant que je sache, ne précharge pas les fichiers de 'lib'. –

Répondre

2

Vous pouvez placer vos extensions dans le répertoire config/initializers, afin qu'elles soient préchargées automatiquement par Rails.

+0

hmm ... Ça marche, mais est-ce la meilleure pratique? –

+0

Je pense que c'est. 'Rails se tourne vers le chargement des initialiseurs. Un initialiseur est un fichier de code ruby ​​stocké sous/config/initializers dans votre application. Vous pouvez utiliser les initialiseurs pour conserver les paramètres de configuration qui doivent être définis après le chargement de tous les frameworks et plugins. »À partir de http://guides.rubyonrails.org/configuring.html. –

0

Vous ne savez pas si la fonctionnalité souhaitée de l'OP est liée à la configuration. Pour charger les fichiers dans/lib, vous pouvez ajouter ce qui suit dans /config/application.rb:

config.autoload_paths += %W(#{config.root}/lib/) 
Questions connexes