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

Cod*_*ama 45 ruby ruby-on-rails ruby-on-rails-3.1

我试图引用一个关联扩展,但它错误:

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

这是我的实现:

应用程序/模型/ user.rb

class User < ActiveRecord::Base
  include ListerExtension

  has_and_belongs_to_many :roles, :uniq => true, :extend => Lister
Run Code Online (Sandbox Code Playgroud)

LIB/lister.rb

module ListerExtension
  def lister
    self.map(&:to_s).join(', ')
  end
end
Run Code Online (Sandbox Code Playgroud)

我正在使用Rails v3.1.3.

Xav*_*olt 76

安德鲁马歇尔关于自动加载设置有一个很好的观点(请参阅他链接的问题以获得更多信息),还有:因为你命名了你的类ListerExtension,Rails将寻找一个名为lister_extension.rb- not 的文件lister.rb.这很聪明,但并不那么聪明.

希望有所帮助!

  • 或者创建一个需要你的文件的初始化文件(在config/initializer中),例如:require'listener.rb' (4认同)
  • 并且[这里](https://groups.google.com/forum/?hl=en&fromgroups=#!topic/rubyonrails-talk/Ziq_0d-bJhI)是一个链接,其中包含一些更有用的细节. (3认同)