Rails里面有LIKE和数组

Mar*_*tin 18 activerecord ruby-on-rails

我怎么能这样做?

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

我需要这里的名字是像所有的产品name1name2.

这可能吗?

Edg*_*ons 35

我想你想用ILIKE函数测试所有的值 .

这是在Postgres中完成的:

select * from table where value ilike any (array['%foo%', '%bar%', '%baz%']);
Run Code Online (Sandbox Code Playgroud)

尝试转换为Rails/Ruby语法,如下所示:

myarray_with_percetage_signs = ["name1","name2"].map {|val| "%#{val}%" }
Product.where("name ILIKE ANY ( array[?] )", myarray_with_percetage_signs)
Run Code Online (Sandbox Code Playgroud)


小智 -9

Product.where('name IN (?)', myarray)
Run Code Online (Sandbox Code Playgroud)

应该可以解决问题;)

  • 虽然这将执行精确匹配,但它并不能回答问题。与 SQL `LIKE`/`ILIKE` 运算符不匹配。 (2认同)