【问题标题】:"Uninitialized constant" error when including a module包含模块时出现“未初始化的常量”错误
【发布时间】:2012-07-17 15:00:45
【问题描述】:

我正在尝试引用关联扩展,但出现以下错误:

NameError (uninitialized constant User::ListerExtension):
  app/models/user.rb:2:in `<class:User>'

这是我的实现:

app/models/user.rb

class User < ActiveRecord::Base
  include ListerExtension

  has_and_belongs_to_many :roles, :uniq => true, :extend => Lister

lib/lister.rb

module ListerExtension
  def lister
    self.map(&:to_s).join(', ')
  end
end

我正在使用 Rails v3.1.3。

【问题讨论】:

标签: ruby-on-rails ruby ruby-on-rails-3.1


【解决方案1】:

Andrew Marshall 关于自动加载设置有一个很好的观点(有关更多信息,请参阅他链接的问题),而且:因为您将类命名为 ListerExtension,Rails 将寻找一个名为 lister_extension.rb 的文件- 不是 lister.rb。它很聪明,但没那么聪明。

希望有帮助!

【讨论】:

  • 还有here 的链接,其中包含更多有用的详细信息。
  • 或创建一个需要您的文件的初始化文件(在 config/initializer 中),例如:require 'listener.rb'
  • 今天这完全咬了我。我更新了文件名,我的代码再次一切正常。 :)
  • 对于其他任何人,我注意到像 include ProfileHelper 之类的东西在 rails 服务器运行时有效,但一旦重新启动就没有。我需要 Api::ProfileHelper 来让服务器在启动时开心。
猜你喜欢
  • 2014-11-29
  • 1970-01-01
  • 2011-05-26
  • 2014-02-23
  • 1970-01-01
  • 2023-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多