如何使用 Rails 中的 Pagy gem 对多个模型进行分页?

How to paginate multiple models with the Pagy gem in Rails?

我正在使用 Searchkick with the Pagy gem 对我的搜索结果进行分页,如果我只在一个模型上进行搜索和分页,它会很好用,但是当我使用 Pagy 时,我不知道如何做到这一点需要将多个模型组合成一组 Searchkick 搜索结果。

我尝试使用 Pagy 的“array extra”将所有单独的 Searchkick 模型查询组合成一个数组,然后在视图中循环遍历结果,但这没有 return 任何搜索结果.

这是适用于单个模型的控制器代码:

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”的文档警告:

if the data in the array comes from some DB or other persisted storage (i.e. not some in-memory storage), then you should definitely review your code

这正是我想要做的。使用 Pagy 对来自多个模型的 Searchkick 结果进行分页似乎是可行的。如果您不应该使用 Pagy 数组来执行此操作,那么您应该如何执行此操作?

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

Searchkick.extend Pagy::Searchkick

然后就可以正常使用了:

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

它没有记录,因此您可能应该为缺少的文档创建一个 Documentation Issue