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

时间:2011-07-31 20:15:59

标签: ruby-on-rails postgresql case-insensitive sql-like

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

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

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

Here is how to fix it with raw SQL

3 个答案:

答案 0 :(得分:41)

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

  • 使用ilike代替like(不区分大小写)
  • 如果您想使用=,请将两边都设为UPPER或LOWER

答案 1 :(得分:4)

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

答案 2 :(得分:4)

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

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

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

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

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