此的Ruby/Rails總是方式讓我爲難:ActiveRecord的查詢鏈
User.where(:name => "Thiago").limit(3).using(:slave_one)
這必須從執行左到右,使每個連續的調用有一個接收器。所以我們從User類開始,調用where
,它返回一個ActiveRecord::Relation
的實例。然後在該實例上調用limit
,返回另一個ActiveRecord::Relation
實例。然後在該實例上調用using
(恰好選擇分片)。整個事情在ActiveRecord::Relation
對象內建立一個SQL查詢,我猜。我的問題是「什麼觸發了查詢的實際執行」?它不能在鏈中的任何特定點執行,因爲在鏈中可能會有後續進一步修改查詢。即使在using
返回後,該查詢仍然無法執行,因爲它無法知道附加方法是否被添加到鏈中。顯然,它在構建完成後執行查詢,那麼實際上如何調用查詢?
謝謝......我現在看到鏈中的方法的名稱有「語義」。有些會進一步修改正在構建的查詢。最後一個也是唯一的最後一個可能是需要獲取數據的類型。