2012-08-11 66 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