Filterer 开源项目使用教程
1、项目介绍
Filterer 是一个面向对象的查询构建工具,专为 ActiveRecord 设计。它允许用户轻松地过滤 ActiveRecord 模型的查询结果。通过 Filterer,开发者可以将复杂的查询逻辑从控制器中分离出来,放入专门的 Filterer 类中,从而使代码更加清晰和易于维护。
2、项目快速启动
安装
首先,在 Gemfile 中添加以下内容:
gem 'filterer'
然后运行 bundle install
安装依赖。
创建 Filterer 类
在 app/filterers
目录下创建一个新的 Filterer 类,例如 PersonFilterer.rb
:
# app/filterers/person_filterer.rb
class PersonFilterer < Filterer::Base
def param_name(x)
results.where(name: x)
end
def param_email(x)
results.where('LOWER(email) = ?', x)
end
def param_admin(x)
results.where(admin: true)
end
# 可选的默认参数
def defaults
{ direction: 'desc' }
end
# 可选的默认过滤器
def apply_default_filters
results.where('deleted_at IS NULL')
end
end
在控制器中使用
在控制器中调用 filter
方法,传递参数:
# app/controllers/people_controller.rb
class PeopleController < ApplicationController
def index
@people = Person.filter(params)
end
end
运行应用
启动 Rails 服务器并访问 /people
,你将看到过滤后的结果。
3、应用案例和最佳实践
案例1:用户过滤
假设你有一个用户列表页面,用户可以通过姓名、邮箱或是否为管理员来过滤结果。使用 Filterer,你可以轻松实现这一功能。
# app/filterers/user_filterer.rb
class UserFilterer < Filterer::Base
def param_name(x)
results.where(name: x)
end
def param_email(x)
results.where('LOWER(email) = ?', x)
end
def param_admin(x)
results.where(admin: true)
end
end
最佳实践
- 保持单一职责:每个 Filterer 类应专注于一个特定的模型或一组相关的过滤逻辑。
- 使用默认参数:通过
defaults
方法设置默认参数,简化控制器的逻辑。 - 避免过度复杂化:如果过滤逻辑过于复杂,考虑将其分解为多个 Filterer 类。
4、典型生态项目
Kaminari
Kaminari 是一个用于分页的 Gem,与 Filterer 结合使用可以轻松实现分页功能。
# Gemfile
gem 'kaminari'
WillPaginate
WillPaginate 是另一个流行的分页 Gem,同样可以与 Filterer 结合使用。
# Gemfile
gem 'will_paginate'
通过这些生态项目,你可以进一步扩展 Filterer 的功能,提供更丰富的用户体验。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考