包含模块时出现“未初始化常量”错误

问题描述 投票:0回答:2

我正在尝试引用关联扩展,但它出错了:

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

这是我的实现:

应用程序/模型/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
2个回答
100
投票

Andrew Marshall 对自动加载设置有一个很好的观点(有关更多信息,请参见他链接的问题),而且:因为您将类命名为

ListerExtension
,Rails 将寻找名为
lister_extension.rb
- 的文件不是
lister.rb
。它很聪明,但没那么聪明。


0
投票

补充上面的答案

当我在我想包含模块的文件中使用 require 'module-relative-path' 时,我的问题就解决了

require './lib/lister.rb' #check if this is the right relative path

 class User < ActiveRecord::Base
  include ListerExtension

  has_and_belongs_to_many :roles, :uniq => true, :extend => Lister
© www.soinside.com 2019 - 2024. All rights reserved.