2015-02-03 1 views
1

У меня есть следующий простой активный записи запрос для поиска accross базы данных для других людей, разделяющих то же название компании (чувствительно к регистру)Как выполнить регистр без учета регистра, если нижний (поле) в базе данных не совпадает с полем.

Короче:

company = "someTHING" 
leads.where("lower(company) = ?", company.downcase) 

хорошо работает независимо от того, в случае с названием компании ,

Проблема возникла, когда один пользователь ввел специальный символ для компании

Echos

leads.where("company = ?", company) -> 2 results 
leads.where("lower(company) = ?", company.downcase) -> 0 result 

с «L'Express», он работает в обоих случаях

Это означает, что нижняя база данных («É») не равно É.downcase

>> company 
=> "Échos" 
>> company.downcase 
=> "Échos" 

Как я могу перфорировать orm поиск, который нечувствителен к регистру И может найти результат в этом случае?

ответ

4

Использование базы данных lower:

where('lower(company) = lower(?)', company) 
+0

Doh! Так просто. Любить его :) Спасибо – Jeremy

0

Использование базы данных объединения lower, вероятно, лучший ответ, как и glebm сказал. Другие варианты могут заключаться в использовании ILIKE или функций regexp postgresql, но эти параметры, вероятно, будут в меньшей степени использовать любой индекс в поле и, следовательно, будут менее эффективными.

Смежные вопросы