2017-08-03 45 views
0

我只是在玩ActiveRecord。雖然這樣做,我發現了一些不尋常的是,如果我輸入兩個單獨的查詢,其中一個.all,另一個沒有. all,該SQL查詢會從模型返回在這兩種情況下,所有的記錄:Rails如何知道返回所有記錄,即使它沒有使用方法.all?

User.includes(:cart)對比User.includes(:cart).allUser.all.includes(:cart)

User.allUser.order(:username)

(有例外的事實,第二個查詢是有序的,他們都產生相同的結果:T嘿都返回所有的查詢。)

他們都似乎產生相同的結果。 Rails如何知道捕獲所有記錄,即使沒有明確說明.all

回答

1

ActiveRecord聰明地延遲執行查詢,直到需要結果。

在像Rails控制檯這樣的REPL(Read-Eval-Print-Loop)中,會自動檢查這些ActiveRecord查詢(可以在控制檯上渲染它們),該查詢將執行查詢以便渲染結果。

請注意,您仍然會返回代表查詢的對象,直到將其轉換爲數組。

User.all.class #=> User::ActiveRecord_Relation 
User.where('1 = 1').class #=> User::ActiveRecord_Relation 
User.all.to_a #=> Array 

這成爲常態,早在Rails的3

相關問題