ruby-on-rails - ruby rails : Get nested modules?

标签 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]

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

最佳答案

那是因为 Rails 自动加载的工作原理。

当您调用 A.constants 时,Rails 在 a.rb 文件中找到 A 并为您提供那里定义的常量。看起来你没有在那里定义任何常量,它是空数组。

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

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

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

关于ruby-on-rails - ruby rails : Get nested modules?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39837944/

相关文章:

ruby - 使用 Nokogiri 调整 IE 条件注释而不转换实体

javascript - 尝试从导入的 ES6 模块调用静态方法

linux - 短脚本、长模块还是长脚本、短模块?

go - 运行项目因包而失败

ruby-on-rails - 我在 rails generate devise :install 之前运行了 rails generate devise MODEL

ruby-on-rails - Devise 不允许我在登录时注册用户

ruby-on-rails - Ruby rails 回形针 Seahorse::Client::NetworkingError(返回 SSL_connect=1 errno=0 state=error:证书验证失败)

ruby-on-rails - 在 Rails Router 中获取异常内容

Jekyll 构建上的 Ruby 错误 FSEVENT

javascript - 手动调用 document.ready