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

发布于 2024-11-27 11:14:27 字数 329 浏览 2 评论 0原文

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

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

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

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

My development database is SQLite but I deploy my app to Heroku and they are using PostgreSQL.

Now sometimes I have two different results coming out if I perform searches because PostgreSQL is case-sensitive but SQLite is not.

Shouldn't Rails standardize these things? What methods should I use to solve that?

Here is how to fix it with raw SQL

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

记忆里有你的影子 2024-12-04 11:14:27

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

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

Case insensitive searching in Postgres:

  • use ilike instead of like (case-insensitive like)
  • if you want to use =, make both sides either UPPER or LOWER
爱的那么颓废 2024-12-04 11:14:27

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

Another DDL way of handling this is the citext data type, or case-insensitive TEXT.

故事灯 2024-12-04 11:14:27

ActiveRecord 无法处理许多相对常见的事情,LIKE 匹配就是其中之一。以下是如何使用直接 Arel 来实现此目的。

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

您可以安装 Arel-Helpers 以使这变得更容易,

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

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

There are many relatively common things that ActiveRecord doesn't handle, and LIKE matching is one of them. Here is how to achieve this using straight Arel instead.

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

You can install Arel-Helpers to make this a little easier

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

I previously recommended Squeel for this, but the original creator has stopped supporting it and there doesn't seem to be a full-time developer maintaining it. And since it plays around with private ActiveRecord APIs, it needs constant tending.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文