我很好奇rails如何查询使用sti的表。例如,如果我的父类是Book
并且我有两个子类ComicBook
和Novel
如果我做了类似的事情
Novel.all.each
既然只有一张桌子,服务器是否也能在所有的漫画书中切换?是否自动添加适当的索引以防止这种情况发生?谢谢
最佳答案
好吧,你不能这样做,Novel.each
没有在模型类上定义。但是,您可以执行each
操作,其中Novel.all.each ...
是一些块。
至于查询的工作方式,只需对任何arel表达式调用...
。to_sql
将返回模型集合本身,因此需要进一步确保通过调用Novel.all
返回有效的arel表达式。
[1] pry(main)> Novel.scoped.to_sql
=> "SELECT \"books\".* FROM \"books\" WHERE \"books\".\"type\" IN ('Novel')"
对经常被查询的大多数列进行索引是一件很好的事情。是的,如果没有索引,rdbms将不得不查看表中的所有记录,作为上述条件检查的一部分。