ruby-on-rails - 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_paginate
gem 一样,我们可以在哪里这样做
.paginate(page: params[:page], per_page: 72, total_entries: @category.items_amount)
解决方案
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 是您的页面大小。
推荐阅读
- insert - 在sql server的表列中添加current_value
- intellij-idea - IntelliJ 2020.2 Jakarta EE 9 支持
- python - destroy object of class python
- c# - 如何动态迭代(不同)对象列表并获取特定属性的值?
- firebase - 添加到 Firebase 且未正确更新的附加字段
- c# - 从 package.json 获取包文件夹中的项目依赖 DLL
- mysql - 如何从 MySql 表中获取唯一记录
- c++ - 运行时错误 -UndefinedBehaviourSanitizer
- reactjs - 如何使用 map 函数动态响应 setState?
- javascript - JavaScript中十进制的字符串转换(十进制到字符串)