Ответ 1
Нечувствительный к регистру поиск в Postgres:
- используйте
ilike
вместоlike
(без учета регистра) - если вы хотите использовать =, сделайте обе стороны ВЕРХНИЙ или НИЖНИЙ
Моя база данных разработки - SQLite, но я развертываю свое приложение в Heroku, и они используют PostgreSQL.
Теперь иногда у меня возникают два разных результата, если я выполняю поиск, потому что PostgreSQL чувствителен к регистру, но SQLite - нет.
Не следует ли Rails стандартизировать эти вещи? Какие методы следует использовать для решения этой проблемы?
Вот как это исправить с помощью raw SQL
Нечувствительный к регистру поиск в Postgres:
ilike
вместо like
(без учета регистра)Другим способом обработки этого является citext
тип данных или нечувствительный к регистру ТЕКСТ.
Существует много относительно распространенных вещей, которые ActiveRecord не обрабатывает, и LIKE-сопоставление является одним из них. Вот как это сделать, используя вместо этого прямой Арел.
Model.where(
Model.arel_table[:title].matches("%#{search_term}%")
)
Вы можете установить Arel-Helpers, чтобы сделать это немного легче
Model.where(Model[:title].matches("%#{search_term}%"))
Я ранее рекомендовал Squeel для этого, но оригинальный создатель остановил его поддержку, и, похоже, поддерживающий его. И поскольку он работает с частными API ActiveRecord, он нуждается в постоянном стремлении.