首页 > 解决方案 > 如何使用 Rails 中的 Pagy gem 对多个模型进行分页?

问题描述

我正在使用SearchkickPagy 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 数组来执行此操作,那么您应该如何执行此操作?

标签: ruby-on-railsrubypaginationsearchkickpagy

解决方案


你可以把它放在 pagey 初始化器中:

Searchkick.extend Pagy::Searchkick

然后你可以像往常一样使用它:

results = Searchkick.pagy_search(query, models: [PressRelease, BlogPost, User])
@pagy, @results = pagy_searchkick(results, items: 10)

它没有记录,因此您可能应该为缺少的文档创建文档问题。


推荐阅读