在Ruby on Rails和PostgreSQL中使用IN运算符进行不区分大小写的搜索

时间:2016-05-20 13:58:57

标签: ruby-on-rails ruby postgresql rails-activerecord

我是ROR的新手并尝试使用Active Record在PostgreSQL数据库中实现搜索。我发现为了使搜索不区分大小写,我可以使用ILIKE运算符而不是equalsLIKE但不确定当我需要使用IN运算符时该怎么做。

我正在获取一个字段名称和一组值,我需要检查这些值,区分大小写的搜索就是这样:

records = records.where(filter['fieldName'] => filter['value'])

其中filter['value']是一个数组。

有没有办法更新该行以使其不区分大小写?

如果不是,那么我相信唯一的方法是遍历该数组并将IN拆分为多个OR操作,并对该数组中的每个值使用ILIKE(不过我'我不确定如何使用OR与Active Record?)

谢谢!

3 个答案:

答案 0 :(得分:3)

records.where("lower(#{filter['fieldName']}) in (?)", filter['value'].map(&:downcase))

答案 1 :(得分:1)

这对我有用:

records = records.where('"' + filter['fieldName'] + '"' +
                         " ILIKE ANY ( array[?] )", filter['value'].map {|value| "%#{value}%" })

答案 2 :(得分:0)

试试这个......

records.where("lower(#{filter['fieldName']}) in ?", filter['value'].map(&:downcase))

希望这对你有用。