【问题标题】:Rails 5: Uninitialized constant in view/controller but not consoleRails 5:视图/控制器中未初始化的常量,但不是控制台
【发布时间】:2026-01-05 12:10:01
【问题描述】:

在我的 Rails 5 应用程序中,我在 app/lib 中有一个模块

module LibClass
  CONSTANT_NAME = ‘somevalue’
end

然后在模型中我引用模块:

class SomeModel < ApplicationRecord
  def lib_class_constant
    LibClass::CONSTANT_NAME
  end
end

当我在控制台中的 SomeModel 实例上调用 lib_class_constant 时,一切都按预期工作

但如果我在视图中做同样的事情:

<%= some_model_instance.lib_class_constant %>

我收到如下错误:

未初始化的常量 SomeModel::LibClass

如果我直接在视图中引用模块:

<%= LibClass::CONSTANT_NAME %>

我收到如下错误:

未初始化的常量 ActionView::CompiledTemplates::LibClass

我在这里错过了什么?

【问题讨论】:

  • 试试::LibClass::CONSTANT_NAME
  • @Vasilisa 谢谢,但这没有用。它取消嵌套它,但我仍然得到uninitialized constant LibClass。这仅在视图/控制器中可以在这些上下文之外正常工作
  • 尝试停止rails服务器并运行spring stop &amp;&amp; rails server
  • 确保在lib_class.rb中定义了LibClass,否则自动加载的大神会生气。
  • 你需要这个文件吗(需要'lib_class')?

标签: ruby-on-rails ruby-on-rails-5


【解决方案1】:

您是否在 class SomeModel &lt; ApplicationRecord 之后尝试过 include LibClass 行? 否则,您是否检查过模型和文件的名称是否正确?即有时您重命名模型而不相应地重命名文件,反之亦然...

【讨论】:

  • 这是文件名。我习惯于对名称不敏感的 lib 文件,但它在 app/lib 而不是 /lib 中,因此自动加载在某些情况下不起作用。