在我User
模型Kaminari稍後調用頁面方法時是否加載所有記錄?
def activities
Activity.where actor_type: self.class.name
end
當我打電話的控制器current_user.activities.page(params[:page])
,我想知道它會加載所有活動記錄或沒有?
在我User
模型Kaminari稍後調用頁面方法時是否加載所有記錄?
def activities
Activity.where actor_type: self.class.name
end
當我打電話的控制器current_user.activities.page(params[:page])
,我想知道它會加載所有活動記錄或沒有?
ActiveRecord延遲加載 - 當您實際訪問結果集中的數據時,它只會調用SQL查詢。
它不會加載活動數據,直到您執行類似.all
或.each
或其他實際需要訪問數據的內容爲止。
不,kaminari不會一次加載所有記錄。您可以在導軌控制檯中對其進行測試:
current_user.activities.page(params[:page]).to_sql # => "SELECT \"activities\".* FROM \"activities\" WHERE \"activities\".\"user_id\" = 1 LIMIT 25 OFFSET 25"
正如您所看到的,LIMIT和OFFSET都參與了SQL查詢。當然,這是急切的加載。