我是ROR的新手并尝试使用Active Record在PostgreSQL数据库中实现搜索。我发现为了使搜索不区分大小写,我可以使用ILIKE
运算符而不是equals
和LIKE
但不确定当我需要使用IN
运算符时该怎么做。
我正在获取一个字段名称和一组值,我需要检查这些值,区分大小写的搜索就是这样:
records = records.where(filter['fieldName'] => filter['value'])
其中filter['value']
是一个数组。
有没有办法更新该行以使其不区分大小写?
如果不是,那么我相信唯一的方法是遍历该数组并将IN
拆分为多个OR
操作,并对该数组中的每个值使用ILIKE
(不过我'我不确定如何使用OR与Active Record?)
谢谢!
答案 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))
希望这对你有用。