2

在我的User模型中

def activities
    Activity.where actor_type: self.class.name
end

当我调用current_user.activities.page(params[:page])控制器时,我想知道它是否会加载所有活动记录?

4

2 回答 2

2

ActiveRecord 是延迟加载的——它只会在您实际访问结果集中的数据时调用 SQL 查询。

在您执行类似.all.each其他实际需要访问数据的操作之前,它不会加载活动数据。

于 2013-04-24T03:22:23.910 回答
1

不,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 查询。当然,它是急切的加载。

于 2013-08-23T00:07:53.267 回答