加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 防止在Rails中使用命名空间类的“warning:top

发布时间:2020-12-16 20:27:05 所属栏目:百科 来源:网络整理
导读:将文件存储在自定义目录(例如:app / presenters /)中时,如何确保加载命名空间的类? 例如,如果你有: app/models/mega_menu.rb app/presenters/catalog_presenter.rb app/presenters/mega_menu/catalog_presenter.rb Rails无法加载MegaMenu :: CatalogPrese
将文件存储在自定义目录(例如:app / presenters /)中时,如何确保加载命名空间的类?

例如,如果你有:

> app/models/mega_menu.rb
> app/presenters/catalog_presenter.rb
> app/presenters/mega_menu/catalog_presenter.rb

Rails无法加载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>

我创建了一个sample Rails 3.2 app that reproduces this problem.

在config / application.rb中,app’s configured to load files in app/presenters/.

解决方法

我在初始化程序中使用了一个require语句来解决这个问题.我不喜欢它,但我喜欢我的应用程序的结构和类名称,它们是有意义的,所以初始化器是我最好的解决方案.在初始化程序中尝试:
require File.join(Rails.root,"app","presenters","mega_menu","catalog_presenter")
require File.join(Rails.root,"catalog_presenter")

发生这个问题是因为autoload依赖于调用const_missing而不会在您的情况下发生.

当ruby首次遇到对MegaMenu :: CatalogPresenter的引用时,未包含mega_menu / catalog_presenter.rb文件.标准的红宝石行为导致它向上移动命名空间树(说明字体),而是在此处查找顶级参考CatalogPresenter.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读