ruby-on-rails - 如何使用 Rails 中的 Pagy gem 对多个模型进行分页?
问题描述
我正在使用Searchkick和Pagy gem来对我的搜索结果进行分页,如果我只在一个模型上搜索和分页,它会很好用,但是当我需要组合多个模型时,我不知道如何使用 Pagy进入一组 Searchkick 搜索结果。
我尝试使用 Pagy 的“额外数组”将所有单独的 Searchkick 模型查询组合到一个数组中,然后遍历视图中的结果,但这并没有返回任何搜索结果。
这是适用于单个模型的控制器代码:
query = params[:q].presence || "*"
results = BlogPost.pagy_search(query, suggest: true, per_page: 20)
@pagy, @results = pagy_searchkick(results, items: 10)
在视图中:
<%= pagy_nav(@pagy).html_safe %>
以下是跨多个模型的组合 Searchkick 查询,但它没有分页:
@search_results = Searchkick.search(query, models: [PressRelease, BlogPost, User])
那么,我应该如何跨多个模型进行分页呢?Pagy 的“ Array Extra ”文档警告:
如果数组中的数据来自某个数据库或其他持久存储(即不是一些内存存储),那么您绝对应该检查您的代码
这正是我想要做的。使用 Pagy 对来自多个模型的 Searchkick 结果进行分页似乎应该是可能的。如果您不应该使用 Pagy 数组来执行此操作,那么您应该如何执行此操作?
解决方案
你可以把它放在 pagey 初始化器中:
Searchkick.extend Pagy::Searchkick
然后你可以像往常一样使用它:
results = Searchkick.pagy_search(query, models: [PressRelease, BlogPost, User])
@pagy, @results = pagy_searchkick(results, items: 10)
它没有记录,因此您可能应该为缺少的文档创建文档问题。
推荐阅读
- java - 在相同的工作 JFrame 中绘制 org.knowm.xchart.XYChart
- python - Selenium Python Find Elements by XPath 不会返回所有预期的元素
- flutter - 我怎样才能只在模态底部工作表中执行 Navigator.push(不是父页面)
- vispy - 如何使用 vispy 创建图像动画
- html - Bootstrap 登录和注册页面是一样的
- .net - 如何模拟服务层中使用的 SignalR
- liferay - 是否可以将 Web 内容更改记录为审核事件?
- python-3.x - 有没有办法创建一个可以学习和忘记类似于口袋妖怪的动作的功能?
- c# - AddAuthenticationSchemes 使用 OR,有没有办法让它使用 AND?
- r - 使用 dplyr 管道将列中的最小值或最大值等统计信息返回到行中