Rails里面有LIKE和数组

我怎么能这样做?

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

我需要获得名称如name1name2所有产品。

这可能吗?

我想你想用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('|'))}'") 

如果你在相等的意义上寻找类似LIKE 'string' (比如SQL中的LIKE 'string'where接受一个Hash of数组值:

 Product.where(name: myarray) Product.where(name: myarray).to_sql # => SELECT "products".* FROM "products" WHERE "products"."name" IN ('x', 'y') 

但是,如果你想通过子串过滤(比如SQL中的LIKE '%substring%' ),请查看Edgars Jekabsons的回答。

 Product.where('name IN (?)', myarray) 

应该做的伎俩;)