регистронезависимый поиск в рельсах - пример Beginning Rails - PullRequest
1 голос
/ 04 июня 2010

Может ли кто-нибудь помочь мне сделать следующий поиск нечувствительным к регистру?

Вот фрагмент кода для поиска поля «title» в модуле событий:

# Add each field to the conditions array
searchable_fields.each_pair do |field, value|
  conditions << "#{field} LIKE ?"
  values << "%#{value}%"
end

Вот данные, которые я ввел:

Concert
■Posted by: bancova
■2010-03-14
■boston
test

«Концерт» - это название этого события.

теперь, когда я вошел в «концерт» (маленькая буква c), я не могу получить событие.

однако, когда я ввел «Концерт», или «oncert», или «cert» ... я могу его получить.

Может ли какой-нибудь друг объяснить код и научить меня, как сделать его нечувствительным к регистру?

спасибо.

1 Ответ

0 голосов
/ 04 июня 2010

Я незнаком с учебником, который вы используете, но похоже, что это проблема с базой данных, а не проблема Ruby / Rails. Проблема в том, что ваша база данных чувствительна к регистру, поэтому «Концерт» совпадает, потому что это то, что есть в БД, а «концерт» - нет, потому что это не соответствует «Концерт».

В любом случае, реальное решение будет зависеть от вашей базы данных и от того, как она настроена, но давайте предположим, что это MySQL, тогда ваше решение будет выглядеть так

searchable_fields.each_pair do |field, value|
  conditions << "#{field} LIKE LOWER(?)"
  values << "%#{value.downcase}%"
end

value.downcase изменит входную строку на все строчные, а функция LOWER sql сделает то же самое на стороне базы данных. Теперь они должны совпадать. Если вы используете SqlLite или Postgres, вам нужно искать их строчные функции, но все остальное будет таким же.

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