完成第一个构建的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