繁体   English   中英

使用Rails进行Postgres不区分大小写的搜索

[英]Postgres case insensitive searching with Rails

我的开发数据库是SQLite,但我将我的应用程序部署到Heroku,他们正在使用PostgreSQL。

现在,如果我执行搜索,有时会出现两个不同的结果,因为PostgreSQL区分大小写,但SQLite不是。

Rails不应该标准化这些东西吗? 我应该用什么方法来解决这个问题?

以下是如何使用原始SQL修复它

Postgres中不区分大小写的搜索:

  • 使用ilike而不是like (不区分大小写)
  • 如果你想使用=,使两边都是UPPER或LOWER

ActiveRecord没有处理许多相对常见的事情,LIKE匹配就是其中之一。 以下是使用直线Arel实现此目的的方法。

Model.where(
  Model.arel_table[:title].matches("%#{search_term}%")
)

您可以安装Arel-Helpers以使其更容易一些

Model.where(Model[:title].matches("%#{search_term}%"))

我之前为此推荐了Squeel ,但最初的创建者已停止支持它,并且似乎没有全职开发人员维护它。 由于它使用私有ActiveRecord API,因此需要不断进行管理。

处理此问题的另一种DDL方式是citext数据类型或不区分大小写的TEXT。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM