SQL-запрос Rails с% Wildcards работает в SQLite, но не в PostgreSQL? - PullRequest
6 голосов
/ 01 июля 2010

У меня есть запрос, который я использую для поиска по следующим условиям:

:conditions => ['family_name LIKE ? OR given_name LIKE ?', "%#{params[:search]}%", "%#{params[:search]}%"]

Запрос работает локально на SQLite, но когда я нажимаю Heroku на PostgreSQL, только первый%работает как для фамилии, так и для данного имени.Другими словами, оно будет соответствовать ключевому слову, которое встречается в конце слова, но не в начале или в середине.

Пример: Существует существующая запись с: family_name => "Washington"и: данное_имя =>" Джордж "

При поиске" ington "или" rge "эта запись будет найдена.Поиск по "Wash" или "Geo" не будет.

Я новый пользователь и довольно плохо знаком с рельсами.Заранее благодарим за помощь.


Решение

Похожие темы: 1 2

Вот исправление, которое я использую:

:conditions => ['LOWER(family_name) LIKE ? OR LOWER(given_name) LIKE ?', "%#{params[:search].downcase}%", "%#{params[:search].downcase}%"]

1 Ответ

11 голосов
/ 02 июля 2010

LIKE - чувствительный к регистру оператор в Postgres. Для сопоставления с образцом без учета регистра используйте ILIKE или другие стандартные методы .

...