lo que funcionó para mí, además descomentando config.autoload_paths (Estoy en Rails 3.1.3), era crear un inicializador de la siguiente manera:
#config/initializers/myapp_init.rb
require 'my_module'
include MyModule
De esta manera puedo llamar a métodos mimodulo desde cualquier lugar y como métodos de clase Model.mymodule_method
o como métodos de instancia mymodel.mymodule_method
Tal vez algunos expertos pueden explicar las implicaciones de esta. Por ahora, úsalo bajo tu propio riesgo.
Editar: Después, creo que una mejor approuch sería:
crear un inicializador de la siguiente manera:
#config/initializers/myapp_init.rb
require ‘my_module’
incluir el módulo en caso necesario, de esta manera:
1) si desea utilizarlo como "Métodos de clase", use "extender":
class Myclass < ActiveRecord::Base
extend MyModule
def self.method1
Myclass.my_module_method
end
end
2) si desea utilizarlo como "Métodos de instancia" incluirlo dentro de la definición de clase:
class Myclass < ActiveRecord::Base
include MyModule
def method1
self.my_module_method
end
end
3) recuerda que include MyModule
se refiere a un archivo my_module.rb
en su trayectoria de carga que debe ser necesario primero
Sólo quería agregar: si uno de sus módulos en/lib (o en uno de los directorios de autocarga) ya está definido; Por ejemplo, si sobrecarga ActiveRecord o String, tendrá que solicitarlo explícitamente o no se cargará – Mike
de manera extraña. Recibo: constante no inicializada GaClient (NameError), a menos que requiera 'ga_client' de antemano (la clase se define en lib/ga_client.rb). ¿Hay documentación para el esquema de nombres de carga automática? – mkirk