ruby-on-rails - ejemplos - ruby on rails que es
Rails 3 autocarga (4)
Tengo una clase ConstData:
class ConstData
US_CITIES = [''miami'', ''new york'']
EUROPERN_CITIES = [''madrid'', ''london'']
end
Se almacena en /lib/const_data.rb
La idea es que dentro de un modelo, controlador o vista pueda hacer:
ConstData::US_CITIES
para obtener las US_CITIES, etc.
Rails debería cargar esta clase automáticamente, obtuve esto de: http://groups.google.com/group/rubyonrails-talk/browse_thread/thread/662abfd1df9b2612?hl=en
Sin embargo, esto no funciona. ¿Alguien puede explicarme cómo lograr esto?
La publicación a la que se refiere @daniel es de 2008. Rails ha cambiado desde entonces.
De hecho, bastante recientemente. Rails3 no carga el directorio lib / automáticamente.
Sin embargo, puedes reactivarlo con bastante facilidad. Abra config/application.rb
Y agregue, en la configuración (en la clase Application
) el siguiente:
config.autoload_paths += %W(#{config.root}/lib)
Entonces su lib / dir se cargará automáticamente.
La razón por la que autoload_paths no funcionó para ti y te obligaron a hacerlo:
Dir["lib/**/*.rb"].each do |path|
require_dependency path
end
es porque olvidaste el espacio de nombres de tu clase .
lib / awesome / stuffs.rb debe contener una clase / módulo como este:
class/module Awesome::Stuffs
....
pero tuviste:
class/module Stuffs
....
Los raíles solo pueden autocargar clases y módulos cuyo nombre coincida con su ruta de archivo y nombre de archivo.
:)
Sigue la solución para que lib dir sea autocargado:
Eliminar config.threadsafe!
de development.rb y production.rb ;
Agregar en config/application.rb
:
config.autoload_paths += %W(#{config.root}/lib)
config.threadsafe!
config.dependency_loading = true
config.autoload_paths
no funcionó para mí. Lo resolví poniendo lo siguiente en ApplicationController
:
Dir["lib/**/*.rb"].each do |path|
require_dependency path
end