在我的Rails项目中,我希望获得嵌套在模块A
内的所有模块。
文件lib / assets / a / b.rb包含:
module A
module B
end
end
在Rails控制台中:
A.constants
=> []
A::B.class
=> Module
A.constants
=> [:B]
为什么第一行返回一个空数组,如何解决问题?
答案 0 :(得分:1)
那是因为Rails自动加载如何工作。
当你调用A.constants
Rails时,在A
文件中找到a.rb
并获取那里定义的常量。因为你似乎没有在那里定义任何常量,所以它是空数组。
当您致电A::B.class
Rails时,自动加载会查找A::B
并加载a/b.rb
。因此,下次调用A.constants
时,它会返回a.rb
和a/b.rb
中定义的常量,因为这两个文件现在都已加载。这就是它第二次返回B
的原因。
所以,你无法解决问题。这是预期的,因为它是由Rails自动加载的工作原理引起的。
另外,您说您的模型位于lib/assets/
,但这没有区别,因为如果它们位于models/
中则相同。