Eu posso facilmente subir a hierarquia de classes no Ruby:
String.ancestors # [String, Enumerable, Comparable, Object, Kernel]
Enumerable.ancestors # [Enumerable]
Comparable.ancestors # [Comparable]
Object.ancestors # [Object, Kernel]
Kernel.ancestors # [Kernel]
Existe alguma maneira de descer a hierarquia também? Eu gostaria de fazer isso
Animal.descendants # [Dog, Cat, Human, ...]
Dog.descendants # [Labrador, GreatDane, Airedale, ...]
Enumerable.descendants # [String, Array, ...]
mas não parece haver um descendants
método.
(Essa pergunta surge porque eu quero encontrar todos os modelos em um aplicativo Rails que descendem de uma classe base e listá-los; eu tenho um controlador que pode trabalhar com qualquer modelo e gostaria de poder adicionar novos modelos sem precisar modificar o controlador.)