Digamos que tengo que tengo el siguiente archivo en mi directorio lib de mi solicitud rieles:¿Cuándo y dónde necesito archivos en una aplicación de rieles?
#lib/proxy.rb
module SomeService
class ServiceProxy
def do_something
end
end
end
Si quiero usar ServiceProxy en un modelo, lo puedo usar de esta manera:
#app/models/product.rb
require 'proxy'
class Product < ActiveRecord::Base
def do_something
proxy = SomeService::ServiceProxy.new
proxy.do_something
end
end
Esto funciona, pero noté que si quiero usar ServiceProxy en otro modelo, no necesito "requerir 'proxy'" en el segundo archivo de modelo. Parece que tener "requerir 'proxy'" una vez en cualquier modelo lo agregará a la ruta de búsqueda.
¿Alguien puede explicar este comportamiento y las mejores prácticas que lo rodean en una aplicación de rieles?
Gracias!
ACTUALIZACIÓN: Sobre la base de la respuesta de Floyd más adelante, si mi archivo ServiceProxy se guardó como así,
#lib/some_service/service_proxy.rb
entonces yo no tendría que exigir explícitamente el archivo.
Muy útil. Siempre había usado la convención de nombres, así que no sabía que no funcionaría si no lo hacía. – Emily
No sé si algo ha cambiado en Rails, pero siempre tengo que agregar esto en config/application.rb antes de que funcione el comportamiento anterior: config.autoload_paths + =% W (# {config.root}/lib) –
Esta publicación es más detallada: http://urbanautomaton.com/blog/2013/08/27/rails-autoloading-hell/ –