Pagy 分页库使用教程
1. 项目介绍
Pagy 是一个高性能的 Ruby 分页库,旨在为 Rack 框架(如 Rails、Sinatra、Padrino 等)提供快速、灵活的分页功能。Pagy 不仅支持各种 ORM 和数据库,还支持多种分页方式,如无限滚动、JSON 分页、头部分页等。其设计目标是提供最佳的性能和最小的内存消耗,使其成为 Ruby 生态系统中最优秀的分页库之一。
2. 项目快速启动
安装
首先,将 Pagy 添加到你的 Gemfile 中:
gem 'pagy'
然后运行 bundle install
安装 Pagy。
基本使用
-
在控制器中引入 Pagy:
class ApplicationController < ActionController::Base include Pagy::Backend end
-
在视图辅助方法中引入 Pagy:
module ApplicationHelper include Pagy::Frontend end
-
在控制器中使用 Pagy 进行分页:
class ProductsController < ApplicationController def index @pagy, @products = pagy(Product.all) end end
-
在视图中渲染分页导航:
<%== pagy_nav(@pagy) if @pagy.pages > 1 %>
自定义配置
你可以在 config/initializers/pagy.rb
中设置 Pagy 的默认配置:
Pagy::DEFAULT[:items] = 10 # 每页显示的条目数
Pagy::DEFAULT[:size] = [1, 4, 4, 1] # 分页导航栏的链接数量
3. 应用案例和最佳实践
案例1:使用 Pagy 进行 JSON 分页
如果你需要为 API 提供分页功能,可以使用 Pagy 的 metadata
扩展:
-
引入
metadata
扩展:require 'pagy/extras/metadata'
-
在控制器中使用
pagy_metadata
:class Api::ProductsController < ApplicationController def index @pagy, @products = pagy(Product.all) render json: { data: @products, pagy: pagy_metadata(@pagy) } end end
案例2:使用 Pagy 进行头部分页
如果你需要为 API 提供头部分页信息,可以使用 Pagy 的 headers
扩展:
-
引入
headers
扩展:require 'pagy/extras/headers'
-
在控制器中使用
pagy_headers_merge
:class Api::ProductsController < ApplicationController def index @pagy, @products = pagy(Product.all) pagy_headers_merge(@pagy) render json: @products end end
4. 典型生态项目
1. Rails
Pagy 是 Rails 生态系统中最受欢迎的分页库之一,广泛应用于各种 Rails 应用中。它与 ActiveRecord 无缝集成,提供了高性能的分页功能。
2. Sinatra
Pagy 也可以在 Sinatra 应用中使用,为小型应用提供快速、灵活的分页功能。
3. Padrino
Padrino 是一个基于 Sinatra 的微框架,Pagy 同样可以与之集成,提供高效的分页功能。
4. Sequel
Pagy 支持 Sequel ORM,可以在使用 Sequel 的项目中轻松实现分页功能。
通过以上内容,你可以快速上手 Pagy 分页库,并在不同的 Ruby 项目中应用它。