Diciamo che ho Ho il seguente file nella mia lib della mia applicazione rotaie:Quando e dove richiedere i file in un'applicazione rota?
#lib/proxy.rb
module SomeService
class ServiceProxy
def do_something
end
end
end
Se voglio usare ServiceProxy in un modello, posso usarlo in questo modo:
#app/models/product.rb
require 'proxy'
class Product < ActiveRecord::Base
def do_something
proxy = SomeService::ServiceProxy.new
proxy.do_something
end
end
Funziona, ma ho notato che se si desidera utilizzare ServiceProxy in un altro modello, non è necessario "require 'proxy'" nel secondo file del modello. Sembra che "richiede 'proxy'" una volta in qualsiasi modello lo aggiungerà al percorso di ricerca.
Qualcuno può spiegare questo comportamento e le migliori pratiche che lo circondano in un'applicazione di rotaie?
Grazie!
UPDATE: in base alla risposta del floyd qui sotto, se il mio file ServiceProxy è stato salvato come così,
#lib/some_service/service_proxy.rb
allora non avrei dovuto richiedere esplicitamente il file.
Molto utile. Ho sempre usato la convenzione di denominazione, quindi non sapevo che non avrebbe funzionato se non l'avessi fatto. – Emily
Non so se qualcosa è cambiato in Rails, ma ho sempre bisogno di aggiungerlo in config/application.rb prima che il comportamento sopra funzioni: config.autoload_paths + =% W (# {config.root}/lib) –
Questo post è più dettagliato: http://urbanautomaton.com/blog/2013/08/27/rails-autoloading-hell/ –