2012-03-01 2 views
0

в приложении Rails 3.2 У меня есть поле поиска, которое использует следующую процедуру в пользовательской модели.Как выполнить регистр без учета регистра в приложении Rails?

def self.search(search) 
    if search 
     where('fullname LIKE ? OR email LIKE ?', "%#{search}%", "%#{search}%") 
    else 
     scoped 
    end 
end 

Это, как представляется, выполняет поиск с учетом регистра. Как я могу изменить это так, чтобы он не чувствителен к регистру?

Большое спасибо

+0

Rails может сделать это для вас. Используйте [встроенную библиотеку Arel или драгоценный камень, такой как Squeel] (http://stackoverflow.com/questions/2220423/case-insensitive-search-in-rails-model). – Dogweather

ответ

5

Если вы используете Postgres вы можете использовать 'ILIKE':

def self.search(search) 
    if search 
    where('fullname ILIKE ? OR email ILIKE ?', "%#{search}%", "%#{search}%") 
    else 
    scoped 
    end 
end 
+0

Спасибо @bradley. Я использую Postges, и это сработало. Правильно ли я полагаю, что LIKE нечувствителен к регистру на других платформах db? Я не помню, чтобы наткнуться на это раньше. –

+0

LIKE чувствителен к регистру в MySQL, по крайней мере. –

0

Когда я сделал это в прошлом, я использовал MySQL рутинную UPPER. Так что-то вроде

def self.search(search) 
    if search 
     where('UPPER(fullname) LIKE ? OR UPPER(email) LIKE ?', upcase(search), upcase(search)) 
    else 
     scoped 
    end 
end 
Смежные вопросы