【发布时间】:2017-11-14 07:42:25
【问题描述】:
我正在使用 Rails STI 对复杂域进行建模。在一个视图中,我列出了所有子类:
> <% StateDescription.subclasses.each do |state_description| %> <li>
> <%= state_description.to_s %> </li> <% end %>
旨在最终使子类的每个标签成为指向该子类实例的单个“索引”页面的链接。
这使我不必自己拥有所有可能子类的列表(如果我添加更多,以后再更新它)。
但是,我注意到只有我实际从数据库中加载的那些子类显示在列表中。如果我说 StateDescription.all,那么所有现有的子类都会出现(但没有一个没有实例)。如果我改为询问所有特定子类,那么只会显示该子类。
我想这是我听说过的“延迟加载”的一部分。是吗?问题似乎是,如果我不从数据库中获取特定的“类型”,即使我有它的模型,它也可能不存在?
有没有办法解决这个问题,还是我注定要为我创建的每个子类写一个链接?
编辑:
在控制台上,如果我键入
StateDescription.subclasses.count
我得到 0。
如果我然后执行 StateDescription.all 和 THEN StateDescription.subclasses.count,我得到 14。
【问题讨论】:
-
试试
StateDescription.descendants,看看会不会有什么不同。我不熟悉该方法,因此无法直接回答您的问题,但您对延迟加载的想法可能是正确的。 -
.descendants 具有完全相同的行为,遗憾的是。
-
是的,我在发布后意识到
#subclasses实际上使用了#descendants方法,所以这是有道理的。忽略那个。我的回答有帮助吗?
标签: ruby-on-rails single-table-inheritance