[解決済み】Railsアプリのすべてのモデルのコレクションを取得する方法はありますか?
2022-04-08 05:18:17
質問
RailsアプリのすべてのModelのコレクションを取得する方法はありますか?
基本的に、以下のようなことは可能でしょうか。-
Models.each do |model|
puts model.class.name
end
解決方法は?
編集部:コメントや他の回答を見てください。これより賢い答えがあるはずです。あるいは、コミュニティWikiとしてこれを改善することを試みてください。
モデルはマスターオブジェクトに自分自身を登録しないので、Railsはモデルのリストを持っていません。
でも、アプリケーションのmodelsディレクトリの中身を見ることはできるはず...。
Dir.foreach("#{RAILS_ROOT}/app/models") do |model_path|
# ...
end
EDIT: もう一つの(野生の)アイデアは、Ruby Reflectionを使って、ActiveRecord::Baseを拡張するすべてのクラスを検索することです。しかし、すべてのクラスをリストアップする方法を知りません....
EDIT: 面白半分に、全クラスをリストアップする方法を見つけました。
Module.constants.select { |c| (eval c).is_a? Class }
EDIT: やっとディレクトリを見ずに全モデルをリストアップすることに成功した
Module.constants.select do |constant_name|
constant = eval constant_name
if not constant.nil? and constant.is_a? Class and constant.superclass == ActiveRecord::Base
constant
end
end
派生クラスも扱いたい場合は、スーパークラス・チェーン全体をテストする必要があります。私は、Classクラスにメソッドを追加することでそれを行いました。
class Class
def extend?(klass)
not superclass.nil? and ( superclass == klass or superclass.extend? klass )
end
end
def models
Module.constants.select do |constant_name|
constant = eval constant_name
if not constant.nil? and constant.is_a? Class and constant.extend? ActiveRecord::Base
constant
end
end
end
関連
-
[解決済み] nil:NilClass の未定義メソッド `each'... なぜでしょうか?
-
[解決済み] コレクションを反復処理し、ループ内でオブジェクトを削除する際に ConcurrentModificationException を回避する。
-
[解決済み] Rubyでnilとemptyとblankを理解する方法
-
[解決済み] Ruby on Railsで現在の絶対URLを取得するにはどうすればよいですか?
-
[解決済み] Ruby on RailsでJSON出力を "きれい "にフォーマットする方法
-
[解決済み] Rails 4で懸念事項を使用する方法
-
[解決済み] C# Setコレクション?
-
[解決済み】Javaの「ダブルブレース初期化」の効率化?
-
[解決済み】nullと空のコレクションのどちらを返すのが良いですか?
-
[解決済み】RailsでActiveRecordモデルとそのテーブルの名前を変更するマイグレーションはどのように記述するのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】修正方法:エラー:'<ファイル名>'にチェックアウトされたコミットがない fatal: コマンドプロンプトで "git add ." を入力するとファイルの追加に失敗する
-
[解決済み】取得中。「プロジェクトのクローンとマイグレート後に、「マイグレーションは保留中です。この問題を解決するには 'bin/rake db:migrate RAILS_ENV=development' を実行してください。
-
[解決済み】gemのインストールができない - gemネイティブ拡張の構築に失敗 - そのようなファイルをロードできない -- mkmf (LoadError)
-
[解決済み】コントローラでJSONをレンダリングする
-
[解決済み] Rubyの文字列から日付への変換
-
[解決済み] デバイスを使用する現在のユーザーメソッド
-
[解決済み] Devise Admin Roleの追加【終了しました
-
[解決済み] Ruby on Rails の新規セットアップ : "Expected string default value for '--rc'; got false (boolean)".
-
[解決済み】Rubyの "and "と"&&"の違い?
-
[解決済み] データベーステーブルの全レコードを削除する