在我的 Rails 项目中,我想获取嵌套在模块 A
中的所有模块。
文件 lib/assets/a/b.rb,包括:
module A
module B
end
end
在 Rails 控制台中:
A.constants
=> []
A::B.class
=> Module
A.constants
=> [:B]
为什么第一行返回一个空数组,我该如何解决这个问题?
最佳答案
那是因为 Rails 自动加载的工作原理。
当您调用 A.constants
时,Rails 在 a.rb
文件中找到 A
并为您提供那里定义的常量。看起来你没有在那里定义任何常量,它是空数组。
当您调用 A::B.class
时,Rails 自动加载会查找 A::B
并加载 a/b.rb
。因此,下次您调用 A.constants
时,它会返回在 a.rb
和 a/b.rb
中定义的常量,作为两个文件现在加载。这就是它第二次返回 B
的原因。
所以,你无法解决问题。这是预期的,因为它是由 Rails 自动加载的工作方式引起的。
此外,您说您的模型位于 lib/assets/
中,但这没有区别,因为如果它们位于 models/
中,它们将是相同的。
关于ruby-on-rails - ruby rails : Get nested modules?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39837944/