2012-08-11 64 views
2

我正在构建Rails引擎。我这样定义的控制器,Rails在加载模块链时遇到了问题

module A::B::C::D::E 
    extend ActiveSupport::Concern 

    # module stuff ... 
end 

class ExamplesController < ApplicationController 
    include A::B::C::D::E 

    # controller stuff ... 
end 

当我开始了Rails控制台,rails console,我得到以下错误,

uninitialized constant A::B (NameError) 

为什么我得到这个错误?

回答

2

因为模块在您使用它的位置不存在。 由于A未定义,Ruby不知道它是什么。

注意,::是用于一个范围解析操作符查找,不定义命名空间般的层次结构。

如果定义A第一它的工作:

module A 
end 

然后B

module A::B 
end 

然后C

module A::B::C 
end 

等。

当然,你也可以这样做:

module A 
    module B 
    module C 
     module D 
     module E 
     end 
     end 
    end 
    end 
end