Ruby on rails 如何将我自己的类与gem';s级

Ruby on rails 如何将我自己的类与gem';s级,ruby-on-rails,ruby,namespaces,Ruby On Rails,Ruby,Namespaces,我有一个Rails项目,我已经做了一段时间了。像许多Rails项目一样,我有一个用户类。在我的一个控制器中,我需要从我正在使用的gem访问一些方法。gem中的示例代码演示了如何对特定gem模块使用include。我不打算在这里使用实际的gem,因为它对这个问题并不重要。我无法控制这个gem,我需要模块的功能 include GemName::Module 问题是Gem在我的控制器中包含的模块下直接包含了它自己的用户类。这导致对我自己的用户类调用gem用户类中未定义的方法失败: User.wor

我有一个Rails项目,我已经做了一段时间了。像许多Rails项目一样,我有一个用户类。在我的一个控制器中,我需要从我正在使用的gem访问一些方法。gem中的示例代码演示了如何对特定gem模块使用include。我不打算在这里使用实际的gem,因为它对这个问题并不重要。我无法控制这个gem,我需要模块的功能

include GemName::Module
问题是Gem在我的控制器中包含的模块下直接包含了它自己的用户类。这导致对我自己的用户类调用gem用户类中未定义的方法失败:

User.working?(:测试用户)
NoMethodError(GemName::Module::User:类的未定义方法“working”):
我想做的是能够在我的控制器中包含模块,并且能够在同一控制器中使用我的应用程序的用户类

我已经测试了以下变通方法,这两种方法似乎都有效,但我对这两种方法都不是特别满意:

  • 在包含gem模块之前,创建一个新常量以引用我自己的用户类
  • LocalUser=User
    包含名称::模块
    
  • 不要包含该模块,并显式调用我可能需要的任何类(使用完全命名空间调用)
  • GemName::Module::Class.method
    
    我意识到我可以给我的用户类命名,但这需要围绕代码库进行大量重构,而且我并不喜欢这个想法。这个控制器从gem调用类大约20次,而我自己的用户类只调用一次。控制器从不调用gem的用户类。如果可能,我希望强制对我自己的用户类的调用显式引用我的非命名空间类,并将include保留到gem模块


    希望有一个优雅的解决方案可以增加我对Ruby中名称空间的理解。在发布了这个问题之后,我想“如果我在调用自己的非名称空间类时在用户面前简单地添加ad::会怎么样?”

    果然,它起作用了

    ::User.working?(:test\u User)
    
    调用我自己的用户类

    我把问题和答案留给别人,以防对别人有帮助