在我的User
模型中
def activities
Activity.where actor_type: self.class.name
end
当我调用current_user.activities.page(params[:page])
控制器时,我想知道它是否会加载所有活动记录?
在我的User
模型中
def activities
Activity.where actor_type: self.class.name
end
当我调用current_user.activities.page(params[:page])
控制器时,我想知道它是否会加载所有活动记录?
ActiveRecord 是延迟加载的——它只会在您实际访问结果集中的数据时调用 SQL 查询。
在您执行类似.all
或.each
其他实际需要访问数据的操作之前,它不会加载活动数据。
不,kaminari 不会一次加载所有记录。您可以在 rails 控制台中对其进行测试:
current_user.activities.page(params[:page]).to_sql # => "SELECT \"activities\".* FROM \"activities\" WHERE \"activities\".\"user_id\" = 1 LIMIT 25 OFFSET 25"
如您所见,LIMIT 和 OFFSET 都涉及到 SQL 查询。当然,它是急切的加载。