Я легко могу подняться на иерархию классов в 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, которые происходят от базового класса, и перечислить их; у меня есть контроллер, который может работать с любой такой моделью, и я хотел бы иметь возможность добавлять новые модели без необходимости изменять контроллер.)