Ce qui a fonctionné pour moi, en plus décommentant config.autoload_paths (je suis sur Rails 3.1.3), était de créer un initialiseur comme ceci:
#config/initializers/myapp_init.rb
require 'my_module'
include MyModule
De cette façon, je peux appeler des méthodes de mymodule de partout et que les méthodes de classe Model.mymodule_method
ou méthodes d'instance mymodel.mymodule_method
Peut-être que certains experts peuvent expliquer les implications de cela. À présent, utilisez-le à vos risques et périls.
Edit: Ensuite, je pense mieux approuch serait:
créer un initialiseur comme ceci:
#config/initializers/myapp_init.rb
require ‘my_module’
Inclure le module en cas de besoin, comme ceci:
1) Si vous voulez l'utiliser comme "Méthodes de classe", utilisez "étendre":
class Myclass < ActiveRecord::Base
extend MyModule
def self.method1
Myclass.my_module_method
end
end
2) si vous voulez l'utiliser comme « Méthodes d'instance » inclure dans la définition de la classe:
class Myclass < ActiveRecord::Base
include MyModule
def method1
self.my_module_method
end
end
3) se rappeler que include MyModule
fait référence à un fichier my_module.rb
dans votre chemin de charge qui doit être d'abord nécessaire
voulait ajouter: Si l'un de vos modules dans/lib (ou dans l'un des répertoires de chargement automatique) est déjà défini; Par exemple, vous surchargez ActiveRecord ou String, vous devrez l'exiger explicitement ou il ne sera pas chargé – Mike
étrangement, j'obtiens: GaClient non initialisé (NameError), sauf si j'ai besoin de 'ga_client' au préalable (la classe est définie dans lib/ga_client.rb). Existe-t-il une documentation pour le schéma de dénomination Autoload? – mkirk