1

我很好奇 rails 如何查询使用 STI 的表。例如,如果我的父类是Book并且我有两个子类ComicBook,并且Novel如果我做类似的事情

Novel.all.each

因为只有一张桌子,服务器是否也会切换所有漫画书?是否会自动添加适当的索引来防止这种情况?谢谢

4

1 回答 1

2

好吧,你不能这样做Novel.eacheach没有在模型类上定义。但是,您可以执行Novel.all.each ...where ...is some block。

至于查询是如何工作的,只需调用to_sql任何 ARel 表达式即可。Novel.all将返回模型集合本身,因此您需要更进一步以确保通过调用返回有效的 ARel 表达式scoped

[1] pry(main)> Novel.scoped.to_sql
=> "SELECT \"books\".* FROM \"books\" WHERE \"books\".\"type\" IN ('Novel')"

对大多数经常查询的列进行索引是一件值得考虑的事情。是的,如果没有索引,您的 rdbms 将不得不查看表中的所有记录作为上述条件检查的一部分。

于 2013-04-12T23:17:47.250 回答