【问题标题】:How do I call my namespaced class from the lib directory如何从 lib 目录调用我的命名空间类
【发布时间】:2014-11-13 22:57:28
【问题描述】:

我的 lib 目录中有一个深度为 3 层的类,我试图调用它,但我得到一个未初始化的常量错误。我的类和目录结构如下所示:

文件名:lib/my_module/my_second_module/my_third_module/my_class.rb

module my_module
  module my_second_module
    module my_third_module
      class my_class
        def self.something
          do something...
        end
      end
    end
  end
end

我正在尝试使用 rails 控制台调用此类,但它返回“未初始化的常量 my_module”。我运行此命令并收到此错误:

MyModule::MySecondModule::MyThirdModule::MyClass.something

我还在 config/application.rb 中包含以下内容

config.autoload_paths += Dir["#{config.root}/lib/my_module/**/"]

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3.2


    【解决方案1】:

    试试::MyModule::MySecondModule::MyThirdModule::MyClass.something

    【讨论】:

    • 它仍在抱怨第一个模块。 - NameError: 未初始化的常量 MyModule
    【解决方案2】:

    我通过使用另一种方法将我的模块加载到 lib 文件夹中来解决我的问题。由于某种原因,我没有加载我的 lib 文件的方式:

    config.to_prepare do
      Dir.glob(File.join(File.dirname(__FILE__), "../lib/my_module/**/*.rb")) do |c|
        Rails.configuration.cache_classes ? require(c) : load(c)
      end
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-08
      • 1970-01-01
      • 2021-06-12
      • 1970-01-01
      相关资源
      最近更新 更多