Filterer 开源项目使用教程

Filterer 开源项目使用教程

filterer :mag: Object-oriented query building for ActiveRecord. 项目地址: https://gitcode.com/gh_mirrors/fi/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

最佳实践

  1. 保持单一职责:每个 Filterer 类应专注于一个特定的模型或一组相关的过滤逻辑。
  2. 使用默认参数:通过 defaults 方法设置默认参数,简化控制器的逻辑。
  3. 避免过度复杂化:如果过滤逻辑过于复杂,考虑将其分解为多个 Filterer 类。

4、典型生态项目

Kaminari

Kaminari 是一个用于分页的 Gem,与 Filterer 结合使用可以轻松实现分页功能。

# Gemfile
gem 'kaminari'

WillPaginate

WillPaginate 是另一个流行的分页 Gem,同样可以与 Filterer 结合使用。

# Gemfile
gem 'will_paginate'

通过这些生态项目,你可以进一步扩展 Filterer 的功能,提供更丰富的用户体验。

filterer :mag: Object-oriented query building for ActiveRecord. 项目地址: https://gitcode.com/gh_mirrors/fi/filterer

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

齐游菊Rosemary

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值