Поиск без учета регистра в Postgres с помощью Rails - PullRequest
11 голосов
/ 01 августа 2011

Моя база данных для разработки - SQLite, но я развернул свое приложение на Heroku, и они используют PostgreSQL.

Теперь иногда у меня появляются два разных результата, если я выполняю поиск, потому что PostgreSQL чувствителен к регистру, а SQLite - нет.

Разве Rails не должен стандартизировать эти вещи? Какие методы я должен использовать, чтобы решить это?

Вот как это исправить с помощью необработанного SQL

Ответы [ 3 ]

41 голосов
/ 01 августа 2011

Поиск без учета регистра в Postgres:

  • используйте ilike вместо like (без учета регистра)
  • , если вы хотите использовать =, сделайте обе стороны либоВерхний или нижний
4 голосов
/ 17 июля 2013

Есть много относительно общих вещей, которые ActiveRecord не обрабатывает, и сопоставление LIKE является одним из них. Вот как это сделать, используя вместо этого прямой Арел.

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

Вы можете установить Arel-Helpers , чтобы сделать это немного проще

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

Ранее я рекомендовал Squeel для этого, но первоначальный создатель прекратил поддерживать его, и, похоже, разработчик, работающий на полную ставку, не поддерживает его. А поскольку он работает с частными API-интерфейсами ActiveRecord, он нуждается в постоянном обслуживании.

4 голосов
/ 01 августа 2011

Другим DDL способом обработки является тип данных citext или регистр без учета регистра.

...