6

RailsアプリですべてのMongoidモデル名を見つける方法はありますか. app/models フォルダー内のすべてのファイルを取得するだけですべてのモデルを見つけることができますが、特に mongoid モデル名が必要です。

4

4 に答える 4

15

これは、Mongoid バージョン 3.1 以降で実行できます。Mongoid.models

モデルが自動的に読み込まれない Rails の開発モードの場合は、実行Rails.application.eager_load!してアプリケーション全体を読み込みます。

于 2012-11-21T04:54:42.793 に答える
14

モデルクラスがすでにロードされている場合は、Mongoid::Documentモジュールを含むすべてのクラスを検索してそれらを一覧表示できます。

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

または、クラス名だけが必要な場合:

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

これを実行する前にモデルを強制的にロードする必要がある場合は、次のように実行できます(Rails 3の場合)。

Dir["#{Rails.root}/app/models/**/*.rb"].each { |path| require path }

app/models(すべてのモデルがまたはサブディレクトリにあると仮定します)

于 2012-06-02T12:55:19.193 に答える
1

これは、すべての Mongoid モデルを取得し、必要に応じてそれらをスーパークラスでフィルター処理するためにコーディングした要点です (たとえば、特定のクラスから継承したモデルのみを取得する場合)。

https://gist.github.com/4633211

(Steve ソリューションと比較して、名前空間モデルでも動作します)

于 2013-01-25T10:00:16.333 に答える