2

のクラスと の別のクラスDogがあります。app/models/dog.rbServices::My::Deeply::Nested::Dogapp/services/my/deeply/nested/dog.rb

Services::My (app/services/my.rb) では、次のいずれかへの参照があります (動作はすべての状況でまったく同じであるため、区別する必要はありません)。

  • Deeply::Nested::Dog
  • Services::My::Deeply::Nested::Dog
  • ::Services::My::Deeply::Nested::Dog

上記のどれを選択しても、常に次のエラー メッセージが表示されます。

services/my.rb: 警告: トップレベルの定数 Dog が参照するServices::My::Deeply::Nested::Dog

また、私の深くネストされた Dog は、インタープリターに見られることさえありません (プットと構文エラーを使用して、何も起こらないことがわかりました)。

可能な回避策(私はすべて好きではありません)は次のとおりです。

  • いずれかの Dog クラスの名前を変更します
  • 自動ロードを無効にして代わりに熱心なロードを使用するには、RAILS_ENV=production で実行します。
  • require_dependency深く入れ子になった犬を指す

コンピューター科学者として、上記の回避策のどれも満足のいくものではないと思います。私の深くネストされた Dog が回避策なしでは見つからない理由を理解し、この問題に対する最先端の Ruby / Rails ソリューションが何であるかを調べたいと思います。

よろしくお願いします。

4

1 に答える 1