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 的类别。
我有两个问题:
- 如何避免在第一次调用时加载所有条目,而不是每次调用
第
页
- 因为我还检索了有关不同产品的信息
类别,我想避免 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
我正在使用 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 的类别。
我有两个问题:
- 如何避免在第一次调用时加载所有条目,而不是每次调用 第 页
- 因为我还检索了有关不同产品的信息 类别,我想避免 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