模块的子模块列表

Sig*_*Sig 0 ruby

我正在使用以下模块创建用于版本化Rails应用程序的API:

Module Api
  Module V1
   Controller goes here
  end
end

Module Api
  Module V2
    Controller goes here
  end
end
Run Code Online (Sandbox Code Playgroud)

我想知道最新版本.我以为我可以通过查看得到它Api.constants,但这似乎并非如此,因为我得到一个空数组,如下所示:

Loading development environment (Rails 3.2.12)
irb(main):001:0> Api
=> Api
irb(main):002:0> Api.constants
=> []
Run Code Online (Sandbox Code Playgroud)

但是,如果我第一次Api::V1直接打电话,它似乎有效:

Loading development environment (Rails 3.2.12)
irb(main):001:0> Api
=> Api
irb(main):002:0> Api.constants
=> []
irb(main):003:0> Api::V1
=> Api::V1
irb(main):004:0> Api.constants
=> [:V1]
Run Code Online (Sandbox Code Playgroud)

有没有办法在不事先访问它们的情况下获取所有子模块?

Ser*_*sev 5

这是在工作中自动加载.Api::V1在被引用之前不会加载.这就是你在第一种情况下获得空数组的原因.

您可以调整应用程序以急切加载类.在此处查看更多信息:配置Rails.