Rails - 结合 will_paginate 和搜查

Rails - Combining will_paginate and ransack

我正在使用 Ransack 进行过滤,使用 will_paginate 进行分页,我似乎无法将两者结合使用。

分析我的应用程序的内存问题时,我发现我的 类别控制器 在每次调用时都从数据库中加载所有条目。

def index
    @q = Category.all_cached.paginate(:page => params[:page], :per_page => 30).ransack(params[:q])
    @categories = @q.result(distinct: true)
end

为了获得每个页面的第一个条目,我尝试了以下更改:

def index
    @q = Category.paginate(:page => params[:page], :per_page => 30).ransack(params[:q])
    @categories = @q.result(distinct: true)
end

问题是现在分页不再起作用了。 错误提示:即使有足够的记录可用,也找不到 'id'=x 的类别。

我有两个问题:

  1. 如何避免在第一次调用时加载所有条目,而不是每次调用 第
  2. 因为我还检索了有关不同产品的信息 类别,我想避免 n+1 次调用,我该如何添加它 [includes(:product)] 进入类别控制器?

试试这个方法:

def index
  @q = Category.paginate(page: params[:page], per_page: 30).ransack(params[:q])
  @categories = @q.result(distinct: true).includes(:products)
end