ruby认为即使我指定了完整的命名空间,我也引用了顶级常量

在我的应用程序中,我有

class User include User::Foo end 

User::Foo在app / models / user / foo.rb中定义

现在我正在使用一个定义自己的Foo类的库。 我收到这个错误:

警告:toplevel User :: Foo引用的常量Foo

User仅使用完整路径引用FooUser::FooFoo实际上从未引用Foo

这是怎么回事?

更新:记得以前我遇到过同样的问题,在问题1中看到: 如何在ruby中引用子模块的“完整路径”?

确保所需的User :: Foo定义可见

消息说:它找到的唯一定义是在顶层。 这显然是可疑的,因为你遇到了限定名称的麻烦。

没有一种好方法可以说你想要一个不同的:: User。 这是一个类,ruby将在那里寻找定义,然后在顶层。 您需要以某种方式指定模块而不引用您的类。

解决此问题的一种方法:

 module Other class User include ::User::Foo end end