首页 > 解决方案 > Rails kaminari:如何为分页指定 total_count?

问题描述

COUNT 查询找出 total_count 有时很慢。但是,如果我在模型中缓存 items_amount 或此类字段的值,我想将其用于 kaminari 分页。

示例:我有模型

Category (:id, :title, :items_amount)

然后在显示视图上我想

<%= paginate @items, total_count: @category.items_amount %>

就像 paginate_array 一样,但是在 paginate 中。它对性能非常有用。

是否有这样的功能或如何添加它?

will_paginategem 一样,我们可以在哪里这样做 .paginate(page: params[:page], per_page: 72, total_entries: @category.items_amount)

标签: ruby-on-railsperformancepaginationkaminari

解决方案


Kaminari 只是调用该total_count方法@items以获取计数。默认情况下,这会执行SELECT count(*) ...查询,但您可以将其装饰@items为提供缓存计数的东西。

如果您只是生成页面链接,那么paginate将采取一个total_pages选项。通过提供页数,这意味着paginate调用不需要获取总页数。(我找不到明确记录的选项,但它在代码中并且我已经使用它进行了测试)。

paginate @items, total_pages: @cached_page_count

@cache_page_count可能有一个值(@category.item_amount / 30.0).ceil,以便获得正确的页数,其中 30.0 是您的页面大小。


推荐阅读