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 的未初始化常量的主要内容,如果未能解决你的问题,请参考以下文章

使用 ActiveMerchant::Billing::EwayManagedGateway 的未初始化常量错误

实际初始化的未初始化局部变量? [复制]

Python中的未初始化值?

类的未初始化对象作为参数

为啥在函数体内定义的内置类型的未初始化对象具有未定义的值?

C++构造奇怪的未初始化指针