[解決済み] Rubyでクラスの全子孫を検索する
2022-04-27 06:36:38
質問
Rubyでクラス階層を簡単に昇格させることができます。
String.ancestors # [String, Enumerable, Comparable, Object, Kernel]
Enumerable.ancestors # [Enumerable]
Comparable.ancestors # [Comparable]
Object.ancestors # [Object, Kernel]
Kernel.ancestors # [Kernel]
階層を下降させる方法もあるのでしょうか?次のようにしたいのですが。
Animal.descendants # [Dog, Cat, Human, ...]
Dog.descendants # [Labrador, GreatDane, Airedale, ...]
Enumerable.descendants # [String, Array, ...]
がありますが
descendants
メソッドを使用します。
(この質問が出たのは、Railsアプリケーションでベースクラスから派生したモデルをすべて見つけてリストアップしたいからです。そのようなモデルで動作するコントローラがあり、コントローラを修正することなく新しいモデルを追加できるようにしたいのです)。
どのように解決するのですか?
以下はその例です。
class Parent
def self.descendants
ObjectSpace.each_object(Class).select { |klass| klass < self }
end
end
class Child < Parent
end
class GrandChild < Child
end
puts Parent.descendants
puts Child.descendants
は、Parent.descendants が与えるものを表示します。
GrandChild
Child
はChild.descendantsが与えてくれるものです。
GrandChild
関連
-
[解決済み】Ruby: 特定のバージョンのruby gemをインストールする方法は?
-
[解決済み] Ruby で配列の順序を逆転させる
-
[解決済み] Rubyのswitch文の書き方
-
[解決済み] Rubyで配列に値が存在するかどうかを確認する方法
-
[解決済み] Rubyからシェルコマンドを呼び出す方法
-
[解決済み] Rubyでnilとemptyとblankを理解する方法
-
[解決済み] Rubyで文字列を小文字・大文字に変換する方法
-
[解決済み] Rubyのattr_accessorとは何ですか?
-
[解決済み] Ruby on Railsで現在の絶対URLを取得するにはどうすればよいですか?
-
[解決済み] Rubyのclass << selfイディオム
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Rubyがブロックの中でパイプ文字を使うことについて、誰か説明してください。
-
[解決済み] git, Heroku: pre-receive フックの減少
-
[解決済み] Ruby on railsで改行せずにコンソールに "puts "を使用するにはどうすればよいですか?
-
[解決済み] Homebrew Portable Ruby のインストールに失敗しました (システムのバージョンが古すぎる場合もあります)
-
[解決済み] rubyでディレクトリからすべてのファイルを要求する最良の方法?
-
[解決済み] nil から String への暗黙の変換ができないエラー
-
[解決済み] rubyでto_yamlに書式オプションを指定することはできますか?
-
[解決済み] ファイルの存在を確認する方法 [重複]について
-
[解決済み] rvmのインストールがうまくいきません。"RVMは機能ではありません"
-
[解決済み] Ruby 1.8.7 ハッシュを文字列に変換する