Al almacenar archivos en un directorio personalizado (por ejemplo: app/presenters/
), ¿cómo se asegura que las clases de espacio de nombres estén cargadas?Prevención de "advertencia: constante de nivel B referenciada por A :: B" con clases de espacio de nombres en Rails
Por ejemplo, si usted tiene:
- app/models/mega_menu.rb
- app/presenters/catalog_presenter.rb
- app/presenters/mega_menu/catalog_presenter.rb
rieles no se carga 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>
He creado un sample Rails 3.2 app that reproduces this problem.
En config/application.rb
, app's configured to load files in app/presenters/
.
¿Esto se aplica de la misma manera al directorio de aplicaciones/modelos? Tengo una aplicación/modelos/personas/datos.rb y recibo la misma excepción porque los datos ya están definidos. – joshhepworth
Esto aplicará en cualquier lugar. Es solo una cuestión de cómo se resuelven las constantes faltantes. Si se asegura de que requiere explícitamente ambos modelos, no debería encontrarse con este problema. –