HomePresenter 的未初始化常量
Posted
技术标签:
【中文标题】HomePresenter 的未初始化常量【英文标题】:uninitialized constant for HomePresenter 【发布时间】:2011-12-17 01:30:01 【问题描述】:我正在尝试实现一个 HomePresenter 以在我的 Pages 控制器的主页操作中使用:
# app/controllers/pages_controller.rb
class PagesController < ApplicationController
def home
@presenter = Pages::HomePresenter.new(current_user)
end
...
end
# app/presenters/pages/home_presenter.rb
module Pages
class HomePresenter
def initialize(user)
@user = user
end
...
end
end
我的演示者规格通过且没有错误,但是当我运行服务器并在 Chrome 中访问主页时,我得到了这个:
uninitialized constant ActionController::Caching::Pages::HomePresenter
对于我的应用程序中的其他两个模型,我使用的 IndexPresenters 在命名约定和目录结构方面几乎与这个相同,但它们都没有出现此错误。
在这里找到了一个类似但没有回复的帖子:
Name conflict between controller name and presenter namespace
有什么想法吗?
【问题讨论】:
你有什么理由在 app/presenters/pages/home_presenter.rb 下定义你的类吗?您使用的是哪个版本的导轨?为什么不用lib目录呢? 这是 rails 3.1.1。我猜这个目录结构对我来说似乎是合乎逻辑的。你能解释一下为什么使用 lib/ 会更好吗? 【参考方案1】:想通了,在这里回答:
Name conflict between controller name and presenter namespace
基本上,改变
@presenter = Pages::HomePresenter.new(current_user)
到
@presenter = ::Pages::HomePresenter.new(current_user)
【讨论】:
【参考方案2】:您可能还希望将自动加载路径设置为包含app/presenters
文件夹。请参阅delegate_presenter 的文档了解如何执行此操作。
(另外,看看那个宝石 - 它可能会带你去你要去的地方!)
【讨论】:
这就是我想要的。谢谢。以上是关于HomePresenter 的未初始化常量的主要内容,如果未能解决你的问题,请参考以下文章