Rails加载模块链时遇到问题

时间:2012-08-11 02:33:15

标签: ruby-on-rails ruby rails-engines

我正在构建一个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)

为什么我会收到此错误?

1 个答案:

答案 0 :(得分: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