【问题标题】:How to paginate multiple models with the Pagy gem in Rails?如何使用 Rails 中的 Pagy gem 对多个模型进行分页?
【发布时间】:2021-09-03 13:25:38
【问题描述】:

我使用SearchkickPagy gem 对我的搜索结果进行分页,如果我只在一个模型上搜索和分页,效果很好,但我不知道如何使用Pagy 来执行此操作我需要将多个模型组合成一组 Searchkick 搜索结果。

我尝试使用 Pagy 的“array extra”将所有单独的 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-rails ruby pagination searchkick pagy


    【解决方案1】:

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

    Searchkick.extend Pagy::Searchkick
    

    那你就可以照常使用了:

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

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

    【讨论】:

    • 是的。将 Searchkick.extend Pagy::Searchkick 添加到 pagy 初始化程序正是问题所在。现在就像一个魅力。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2020-04-29
    • 1970-01-01
    • 2023-01-19
    • 2013-09-30
    • 2015-10-01
    • 2013-11-21
    • 1970-01-01
    • 2012-07-12
    相关资源
    最近更新 更多