2

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

为什么我会收到此错误?

4

1 回答 1

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
于 2012-08-11T04:42:57.003 回答