我怎么能做这样的事情?
myarray = ["name1","name2"]
Product.where('name ILIKE ?', %#{myarray}%)
我需要获取名称类似于name1
和的所有产品name2
。
这可能吗?
我怎么能做这样的事情?
myarray = ["name1","name2"]
Product.where('name ILIKE ?', %#{myarray}%)
我需要获取名称类似于name1
和的所有产品name2
。
这可能吗?
我认为您想用 ILIKE
函数测试所有值。
这就是它在 Postgres 中的实现方式:
select * from table where value ilike any (array['%foo%', '%bar%', '%baz%']);
尝试像这样转换为 Rails/Ruby 语法:
myarray_with_percetage_signs = ["name1","name2"].map {|val| "%#{val}%" }
Product.where("name ILIKE ANY ( array[?] )", myarray_with_percetage_signs)
最近遇到了同样的问题,并且由于没有一个答案对我有帮助(我使用的是 MySQL 数据库),我想我会分享我的解决方案。
如果您有一个小型数据库并且不介意检索所有产品,则可以在从数据库中检索所有产品后使用以下方法进行过滤:
Product.select { |product| myarray.any? { |str| product.name.include? str } }
但是,如果您更喜欢在数据库级别执行查询,则可以WHERE REGEXP
通过首先将数组转换为管道分隔列表来使用该子句:
Product.where("`name` REGEXP '#{Regexp.new(myarray.join('|'))}'")
Product.where('name IN (?)', myarray)
应该做的伎俩;)