рельсы - условие поиска без учета регистра - PullRequest
0 голосов
/ 23 января 2011

У меня есть следующее:

  @users = User.find( :all,
                      :select => 'users.*',
                      :conditions => ["fname || ' ' || lname LIKE ?", '%'+"#{params[:q]}"+'%']

Проблема здесь в том, что входные параметры поиска [: q] чувствительны к регистру.Как я могу сделать это без учета регистра в моем приложении Rails 3 Heroku?

Спасибо

Ответы [ 3 ]

7 голосов
/ 23 января 2011

Для PostgreSQL, чтобы получить без учета регистра LIKE, просто используйте ILIKE.Работает в соответствии с активной локалью.

3 голосов
/ 23 января 2011

Довольно "распространенным" решением этой проблемы, по-видимому, является использование функции UPPER для преобразования в вашем случае "fname" или "lname" в верхний регистр, а также преобразования params[:q], например, с помощью upcase.

0 голосов
/ 21 июня 2012

В качестве альтернативы ... вставьте это в вашу модель и вызовите, передав массив строк

def self.find_all_by_lowercasing_name(str_array)
    wrapped = str_array.collect { |a| "'"+ "#{a.downcase}" + "'" }
    return MyModel.where("lower(\"my_models\".\"name\") IN (#{wrapped.join(', ')})")
end

Вышеуказанное работает с Postgres и Sqlite

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