用Pagy分页Rails

本文介绍了如何在Rails应用程序中使用Pagy库进行分页,以解决大数据集的可视化问题。 Pagy以其高性能和低内存占用脱颖而出,适合处理指数增长的数据。文章详细阐述了设置Pagy的步骤,包括在Gemfile中添加依赖,配置初始化文件,以及在前后端集成分页方法。通过实例展示了如何对数组和非数组数据集进行分页,确保在不同场景下都能有效工作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

完成第一个构建的rails应用程序应用程序后,我决定将其试用一​​下。 使用最初在rails控制台上测试过的Ruby命令,我构建了一个种子文件来填充数据库。 建立数据库的原因有两个。 首先是让充满数据的应用程序具有美感。 第二个是查看应用程序如何可视化地扩展海量数据。

在用161个用户,60个博客帖子和49个关系填充数据库之后,其中一页垂直于埃菲尔铁塔的高度延伸。 您可以想象滚动页面很长时间。 因此,我开始寻求一种整体解决方案,以将视图分块成一个页面。 我找到了Pagy。

Pagy是Ruby on Rails的最新分页库。 它的开发考虑了性能,可以轻松地在新的或现有的Ruby on Rails应用程序上进行设置。 同样是因为我使用了Bulma CSS框架,而Pagy也随之开发了。

考虑到指数数据的增长,Pagy是性能和精简资源使用方面的佼佼者。 与其他已知的分页宝石相比,Pagy处于领先地位。

速度

内存利用率

简单

效率

上方可视化中的每个点代表Pagy进行一次完整渲染所消耗的资源。 对于相同的渲染,其他宝石消耗的数百倍。

在本教程中,我们将看到如何使用Rails构建自定义分页组件以对大数据集进行分页。 我们将构建数组和非数组数据集的分页视图。

唯一的先决条件是确保您的Rails应用程序足够完整以查看存储的数据集。

首先通过添加以下行来编辑您的Gemfile。

# ./gemfile

gem 'pagy'

Rails提供了用于放置初始化代码的标准位置(即/config/initializer )。 万一您的应用程序需要在加载Rails之前运行一些代码,请添加一个名为pagy.rb的新文件。 在配置文件中添加以下行。

# config/initializer/pagy.rb

require 'pagy/extras/bulma'
require 'pagy/extras/array'

Extras并没有定义任何新的模块或类,它们只是重新打开Pagy类和模块,并添加了额外的方法,因为它们是已加载的pagy gem的一部分。 这将核心代码与可选的额外功能巧妙地分隔开来,仍然使它的使用与核心部分一样简单。

Pagy :: Backend ”提供了一种与ActiveRecord一起使用的通用分页方法(pagy)。 将方法包含在ApplicationController中,以便将其反映在所有其他控制器上。

# app/controllers/ApplicationController.rb

class ApplicationController < ActionController::Base
  include Pagy::Backend
end

Pagy :: Frontend ”模块提供了一些方法来处理分页的导航方面。 在ApplicationHelper中包括此方法。

# app/helper/ApplicationHelper.rb

module ApplicationHelper
  include Pagy::Frontend
end

确定哪个实例变量可以处理您希望分页显示的数据集。 就我而言,实例变量如下。

# app/controllers/user_controllers.rb

class UsersController < ApplicationController
  def show
    .
    .
    @friends = @user.friends
  end

  def index
    .
    .
    @nofriends = User.all_except(current_user)
  end
.
.
  def friends
    .
    @friends = @user.friends
  end
end

如下使用Pagy属性编辑这些实例变量。

# app/controllers/user_controllers.rb

class UsersController < ApplicationController
  def show
    @ user = User.find(params[:user_id])
    @ pagy , @ friends = pagy(@user.friends, items: 3 ) 
  end

  def index
    @ users = User.all
    @ pagy , @ nofriends = pagy(User.all_except(current_user), page: params [ :page ], items: 9 )
  end
.
.
  def friends
    @ user = User.find(params[:user_id])
    @ pagy_a , @ friends = pagy_array(@user.friends, items: 9 )
  end
end

在ERB的Frontend文件中,在要分页的块的末尾添加以下用于导航的渲染链接。

At the bottom of 
# app/views/users/users.html.erb

 <%=  pagy_bulma_nav(@pagy).html_safe  %>
# app/views/micrpost/friends.html.erb

<%= pagy_bulma_nav(@pagy).html_safe %>

在某些情况下,上面的代码无法对实例变量的数组输出进行分页。 以下示例显示了一个Rails控制台查询,该查询的方括号表示一个数组。

下面的示例显示了不是数组的Rails控制台查询。 显然,它没有方括号

就我而言,我需要从“ @nofriends = User.all_except(current_user), page: params[:page], items: 9 ”中对数组进行分页。 值得庆幸的是,Pagy拥有数组的渲染代码。

At the bottom of 
# app/views/users/friends.html.erb

<%= pagy_bulma_nav(@pagy_a).html_safe %>

完成上述步骤后,刷新您的Rails应用并尝试一下。 Pagy不仅限于Bulma CSS框架,而且还支持引导程序,语义等。请查看我们的存储库,以了解如何设置Pagy。

来源这里这里

From: https://hackernoon.com/pagination-with-pagy-bulma-oe1m32ik

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值