在我的应用程序中查找所有mongoid模型名称

Abh*_*mar 4 mongoid ruby-on-rails-3

有没有办法找到我的rails应用程序中的所有Mongoid模型名称.我可以通过获取app/models文件夹中的所有文件找到所有模型,但我特别想要mongoid模型名称.

Ste*_*eve 13

如果您的模型类已经加载,那么您可以通过查找包含Mongoid :: Document模块的所有类来列出它们.

Object.constants.collect { |sym| Object.const_get(sym) }.
  select { |constant| constant.class == Class && constant.include?(Mongoid::Document) }
Run Code Online (Sandbox Code Playgroud)

或者如果你只是想要类名:

Object.constants.collect { |sym| Object.const_get(sym) }.
  select { |constant| constant.class == Class && constant.include?(Mongoid::Document) }.
  collect { |klass| klass.name }
Run Code Online (Sandbox Code Playgroud)

如果你需要在运行之前强制加载模型,你可以这样做(在Rails 3中):

Dir["#{Rails.root}/app/models/**/*.rb"].each { |path| require path }
Run Code Online (Sandbox Code Playgroud)

(假设您的所有模型都在app/models子目录中)

  • 警告:`Object.constants`不返回命名空间模型. (2认同)

elt*_*are 12

您可以在Mongoid 3.1及更高版本中执行此操作: Mongoid.models

如果您处于未自动加载模型的Rails开发模式,请运行Rails.application.eager_load!以加载整个应用程序.