rails - Case Insensitive Search Condition

时间:2011-01-22 23:02:54

标签: ruby-on-rails postgresql ruby-on-rails-3 heroku

我有以下内容:

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

问题在于搜索输入参数[:q]区分大小写。如何在Rails 3 Heroku应用程序中使其不区分大小写?

由于

3 个答案:

答案 0 :(得分:7)

对于PostgreSQL获取不区分大小写的LIKE只使用ILIKE。它根据活动的区域设置工作。

答案 1 :(得分:3)

此问题的一个相当“常见”的解决方法似乎是使用UPPER函数将您的情况“fname”或“lname”转换为大写并转换params[:q],例如使用upcase

答案 2 :(得分:0)

或者......将它粘贴在你的模型中并通过传入一个字符串数组来调用

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