首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Rails的LIKE和array

Rails的LIKE和array
EN

Stack Overflow用户
提问于 2013-10-17 03:58:06
回答 3查看 11.3K关注 0票数 28

我怎么能做这样的事情呢?

代码语言:javascript
复制
myarray = ["name1","name2"]
Product.where('name ILIKE ?', %#{myarray}%)

我需要得到所有的产品,其中的名称像name1name2

这个是可能的吗?

EN

回答 3

Stack Overflow用户

发布于 2013-10-17 05:39:43

我认为你想用ILIKE函数测试所有的值。

在Postgres中是这样做的:

代码语言:javascript
复制
select * from table where value ilike any (array['%foo%', '%bar%', '%baz%']);

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

代码语言:javascript
复制
myarray_with_percetage_signs = ["name1","name2"].map {|val| "%#{val}%" }
Product.where("name ILIKE ANY ( array[?] )", myarray_with_percetage_signs)
票数 49
EN

Stack Overflow用户

发布于 2018-04-25 10:22:54

最近遇到了同样的问题,因为两个答案都对我没有帮助(我使用的是MySQL数据库),我想我应该分享我的解决方案。

  • 如果您有一个小型数据库,并且不介意检索产品,则可以在检索完数据库中的所有产品后,使用以下命令进行筛选:

Product.select { |product| myarray.any?{|字符串| product.name.include?str }}

  • 如果您希望在数据库级别执行查询,则可以使用str子句,方法是首先将数组转换为以竖线分隔的列表:

Product.where("name REGEXP '#{Regexp.new(myarray.join('|'))}'")

票数 1
EN

Stack Overflow用户

发布于 2013-10-17 04:09:44

代码语言:javascript
复制
Product.where('name IN (?)', myarray)

应该做到这一点;)

票数 -9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19412607

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档