Измените метод поиска в поиске по базе данных, чтобы он не учитывал регистр в приложении Rails - PullRequest
0 голосов
/ 16 апреля 2010

Я изучаю Rails и создал незавершенное приложение, которое выполняет поиск одним словом в базе данных сочетаний клавиш для различных программ (http://keyboardcuts.heroku.com/shortcuts/home). Метод поиска в модели ярлыков следующий:

def self.search(search)
  search_condition = "%" + search + "%"
  find(:all, :conditions => ['action LIKE ? OR application LIKE ?', search_condition, search_condition])
end

... где 'action' и 'application' - это столбцы в таблице SQLite. (источник: https://we.riseup.net/rails/simple-search-tutorial)

По какой-то причине, поиск кажется чувствительным к регистру (вы можете увидеть это, выполнив поиск «Вставить» вместо «Вставить»). Может ли кто-нибудь помочь мне понять, почему и что я могу сделать, чтобы он не учитывал регистр? Если нет, то можете ли вы хотя бы указать мне правильное направление?

Создание базы данных. Сначала я скопировал ярлыки с различных веб-сайтов в Excel и сохранил их в формате CSV. Затем я перенес базу данных и заполнил ее данными, используя db: seed и небольшой скрипт, который я написал (я просмотрел базу данных, и она выглядела нормально). Чтобы получить базу данных SQLite на сервер, я использовал Taps как схему на веб-сайте Heroku (http://blog.heroku.com/archives/2009/3/18/push_and_pull_databases_to_and_from_heroku/). Я использую Ubuntu.

Пожалуйста, дайте мне знать, если вам нужна дополнительная информация. Заранее спасибо за помощь, очень признателен!

Ryan

1 Ответ

0 голосов
/ 16 апреля 2010

Вместо того, чтобы изменять какие-либо настройки в БД, вы можете просто использовать функции SQL для принудительного перевода данных в нижний регистр, а затем соответствующим образом изменить условие поиска:

def self.search(search)
  search_condition = "%" + search.downcase + "%"
  find(:all, :conditions => ['LOWER(action) LIKE ? OR LOWER(application) LIKE ?', search_condition, search_condition])

конец

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...