29

我怎么能做这样的事情?

myarray = ["name1","name2"]
Product.where('name ILIKE ?', %#{myarray}%)

我需要获取名称类似于name1和的所有产品name2

这可能吗?

4

3 回答 3

52

我认为您想用 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)
于 2013-10-16T21:39:42.623 回答
1

最近遇到了同样的问题,并且由于没有一个答案对我有帮助(我使用的是 MySQL 数据库),我想我会分享我的解决方案。

  • 如果您有一个小型数据库并且不介意检索所有产品,则可以在从数据库中检索所有产品后使用以下方法进行过滤:

    Product.select { |product| myarray.any? { |str| product.name.include? str } }
    
  • 但是,如果您更喜欢在数据库级别执行查询,则可以WHERE REGEXP通过首先将数组转换为管道分隔列表来使用该子句:

    Product.where("`name` REGEXP '#{Regexp.new(myarray.join('|'))}'")
    
于 2018-04-25T02:22:54.127 回答
-9
Product.where('name IN (?)', myarray)

应该做的伎俩;)

于 2013-10-16T20:09:44.433 回答