1

我很好奇rails如何查詢使用STI的表。例如,如果我的父類是Book,我有兩個子類ComicBookNovel如果我這樣做用STI查詢數據庫的效率

Novel.all.each 

,因爲只有一個表,通過所有的漫畫書做服務器轉變呢?是否自動添加適當的索引來防止這種情況?謝謝

回答

2

那麼,你不能這樣做Novel.each,each沒有在模型類上定義。但你可以做Novel.all.each ...其中...是一些塊。

至於查詢的工作方式,只需在任何ARel表達式上調用to_sql即可。 Novel.all將返回模型本身的集合,所以您需要進一步確保通過調用scoped來返回有效的ARel表達式。

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

通過頻繁查詢的大多數列進行索引是一件值得考慮的事情。是的,如果沒有索引,rdbms將不得不查看錶中的所有記錄,作爲上述條件檢查的一部分。

+0

改變了我的錯誤,謝謝你的回答。 – Steve