Ruby on Rails:获取嵌套模块?

时间:2016-10-03 18:17:34

标签: ruby-on-rails ruby module

在我的Rails项目中,我希望获得嵌套在模块A内的所有模块。

文件lib / assets / a / b.rb包含:

module A
  module B
  end
end

在Rails控制台中:

A.constants
  => []
A::B.class
  => Module
A.constants
  => [:B]

为什么第一行返回一个空数组,如何解决问题?

1 个答案:

答案 0 :(得分:1)

那是因为Rails自动加载如何工作。

当你调用A.constants Rails时,在A文件中找到a.rb并获取那里定义的常量。因为你似乎没有在那里定义任何常量,所以它是空数组。

当您致电A::B.class Rails时,自动加载会查找A::B并加载a/b.rb。因此,下次调用A.constants时,它会返回a.rba/b.rb中定义的常量,因为这两个文件现在都已加载。这就是它第二次返回B的原因。

所以,你无法解决问题。这是预期的,因为它是由Rails自动加载的工作原理引起的。

另外,您说您的模型位于lib/assets/,但这没有区别,因为如果它们位于models/中则相同。