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 はそれが何であるかを知りません。

は名前空間のような階層を定義するのではなく、 look up::に使用されるスコープ解決演算子であることに注意してください。

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 に答える