0

Rails で 3 レベルの深い継承のコントローラーを使用できますか? そのような些細なことは可能だと思うかもしれませんが、「第3」レベルの具体的なコントローラーは、「初期化されていない定数Ns2::SecondController」の一般的/役に立たないエラーを出します

これは基本的にこのコードです(私はこの正確なコードを試していません)

module Ns3
  class ThirdController < Ns2::SecondController
  end
end

module Ns2
  class SecondController< Ns1::FirstController
  end
end

module Ns1
  class FirstController< ApplicationController
  end
end

注: ルートおよびそのようなすべてのディレクトリ内での名前空間の使用は、適切に設定する必要があります。

ロジックを再配置して、ミックスインまたはヘルパーで何かを機能させることができると確信しています。ただし、私自身の利益のために、差し迫った質問に答えていただきたいと思います。Y/N またはウェイがエラーを通過しました。リファクタリングの回避策 ATM には興味がありません。傷つくことはなかったと思いますが。

ありがとう

4

2 に答える 2

0

クラス名またはファイル名のタイプミスである可能性が最も高いです。

Rails のオートローディングを機能させるには、クラスを正しいファイル/ディレクトリ構造に配置する必要があります。たとえば、次のようになります。

#/controllers/ns3/third_controller.rb
module Ns3
  class ThirdController < Ns2::SecondController
  end
end

#/controllers/ns2/second_controller.rb
module Ns2
  class SecondController < Ns1::FirstController
  end
end

#/controllers/ns1/first_controller.rb
module Ns1
  class FirstController < ApplicationController
  end
end

試してみるもう1つのことは::、次のようにプレフィックスを使用して、ルート名前空間からスコープすることです。

module Ns1
  class SecondController < ::Ns1::FirstController
  end
end

これを試すこともできます:

#/controllers/ns3/third_controller.rb
class Ns3::ThirdController < ::Ns2::SecondController
end
于 2013-05-15T16:42:57.707 に答える
0

これは可能です。

ただし、RoR は奇妙で、基本クラスの名前空間を暗黙的に指定する必要があるようです。現在の名前空間をデフォルトにすると、奇妙な動作をします。

于 2013-05-15T15:58:15.317 に答える