gpt4 book ai didi

ruby-on-rails - 在没有 will_paginate gem 的情况下在 Ruby 中实现分页

转载 作者:太空宇宙 更新时间:2023-11-03 17:48:45 25 4
gpt4 key购买 nike

我已经学习了大约一个月的在线 Ruby on Rails 类(class),目前我的任务是在没有 will_paginate gem 帮助的情况下实现分页。我正在构建的站点显示了一个主题列表,每个主题都包含一些帖子。目标是每页显示 10 个主题或帖子。

这是我目前所拥有的:

我创建了一个 Paginate 模块,Post 和 Topic 模型可以从中调用:

module Paginate
def paginate(args = {})

self.limit(10).offset(args[:page] * 10)

end
end

这就是我在主题 Controller 中调用的内容:

 def index
params[:page] ||= 0
@topics = Topic.paginate(page: params[:page].to_i)
authorize @topics
end

我知道这只会显示前 10 个主题,我必须在 url 中手动输入查询字符串才能显示每组 10 个主题(例如/topics?page=1)。

有没有人对可以清理它的 View 助手方法有任何建议?我不确定如何编写一些东西来生成指向每组 10 个的 html 链接。

谢谢,

马特

最佳答案

到目前为止,您的代码中缺少的主要内容是 paginate 方法需要以某种方式与结果数组一起返回记录总数,即您将返回的数量如果您在没有分页的情况下进行了搜索。您需要它的原因是您知道如何构建助手,它(在最简单的情况下)每页有一个链接。

例如,如果您的页面大小为 10,并且有 46 条记录,则总共有 5 页。因此,您的助手将有指向第 1 页、第 2 页、第 3 页、第 4 页、第 5 页的链接,也可能有“上一页”和“下一页”或类似内容的链接。

WillPaginate 通过返回一个新的对象类来传达这一点,它扩展了 Array(或扩展了 ActiveRecord::Collection 或您通常从 Topic.all 返回的任何内容),并添加了一些额外的方法,如 total_entries 它告诉你额外的信息。

这样做的好处是,因为分页返回与普通搜索相同的类型,并附加了一些额外的信息,您可以用分页搜索代替非分页搜索无需更改所有其余代码:这就像是带有一些额外“内容”的普通搜索。

您真正需要的唯一一点额外信息是“total_entries”数字:您知道您请求的是哪一页以及每页有多少结果,因此您可以根据这三个数字计算分页助手所需的所有其他信息。

请注意,我不是在这里给你代码,只是一个正确方向的指针。

关于ruby-on-rails - 在没有 will_paginate gem 的情况下在 Ruby 中实现分页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28898601/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com