Quando si memorizzano i file in una directory personalizzata (ad es .: app/presenters/
), come si assicura che le classi con spazi dei nomi vengano caricate?Prevenzione di "avviso: costante di livello B referenziata da A :: B" con classi con nomi assegnati in Rails
Ad esempio, se si dispone di:
- app/models/mega_menu.rb
- app/presenters/catalog_presenter.rb
- app/presenters/mega_menu/catalog_presenter.rb
Rails non riesce a caricare MegaMenu::CatalogPresenter
:
CatalogPresenter.new
=> #<CatalogPresenter:0x85bca68 @_routes=nil>
MegaMenu::CatalogPresenter.new
(irb):3: warning: toplevel constant CatalogPresenter referenced by MegaMenu::CatalogPresenter
=> #<CatalogPresenter:0x85750a0 @_routes=nil>
Ho creato un sample Rails 3.2 app that reproduces this problem.
In config/application.rb
, app's configured to load files in app/presenters/
.
Si applica allo stesso modo alla directory app/modelli? Ho un'app/models/people/data.rb e ottengo la stessa eccezione perché Data è già definita. – joshhepworth
Questo si applica ovunque. È solo questione di come vengono risolte le costanti mancanti. Se si assicura di richiedere esplicitamente entrambi i modelli, non si dovrebbe incorrere in questo problema. –