Rails - 结合will_paginate和ransack

时间:2017-04-17 09:17:13

标签: ruby-on-rails ruby will-paginate

我正在使用 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次通话,我该如何添加         [包括(:产品)]进入类别控制器?

1 个答案:

答案 0 :(得分:0)

尝试这种方式:

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