我可以轻松地提升Ruby中的类层次结构:
String.ancestors # [String, Enumerable, Comparable, Object, Kernel]
Enumerable.ancestors # [Enumerable]
Comparable.ancestors # [Comparable]
Object.ancestors # [Object, Kernel]
Kernel.ancestors # [Kernel]
Run Code Online (Sandbox Code Playgroud)
有没有办法下降层次结构?我想这样做
Animal.descendants # [Dog, Cat, Human, ...]
Dog.descendants # [Labrador, GreatDane, Airedale, ...]
Enumerable.descendants # [String, Array, ...]
Run Code Online (Sandbox Code Playgroud)
但似乎没有一种descendants方法.
(出现这个问题是因为我想找到Rails应用程序中的所有模型,这些模型来自基类并列出它们;我有一个控制器可以使用任何这样的模型,我希望能够添加新模型无需修改控制器.)
我想在视图中显示MyModel子类的选择列表.它还没有工作,所以为了进行健全性检查,我把它包括在我的观点中:
<%= MyModel.descendants %>
Run Code Online (Sandbox Code Playgroud)
在第一时间,我渲染后重新启动服务器这个页面,它显示后裔的名单(有六个).随后的所有时间,它都会显示为空列表[].
FWIW,我require在初始化器中有一个声明:
Dir[Rails.root.join("app/models/my_models/**/*.rb").to_s].each {|f| require f}
Run Code Online (Sandbox Code Playgroud)
......我已经证实他们已经被要求了.
@($%&正在发生什么?