我正在尝试引用关联扩展,但它出错了:
NameError (uninitialized constant User::ListerExtension):
app/models/user.rb:2:in `<class:User>'
这是我的实现:
class User < ActiveRecord::Base
include ListerExtension
has_and_belongs_to_many :roles, :uniq => true, :extend => Lister
module ListerExtension
def lister
self.map(&:to_s).join(', ')
end
end
我正在使用 Rails v3.1.3.
Andrew Marshall 对自动加载设置有一个很好的观点(有关更多信息,请参见他链接的问题),而且:因为您将类命名为
ListerExtension
,Rails 将寻找名为lister_extension.rb
- 的文件不是lister.rb
。它很聪明,但没那么聪明。
补充上面的答案
当我在我想包含模块的文件中使用 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