0

我正在寻找类似的方式来查询数据库like this,但努力如何去做我想要的。查询rails db列

我不只是寻找答案,我也寻求你在哪里找到使用的方法。我已经搜索了postgres数据库查询,rails数据库查询,但没有显示出符合我想要的,甚至关闭。

foo = "a,b,c,d" 
b.bar #=> "b,d,a,f,z" Code shorten for the B Class. 

B.where('bar like ?', "%#{foo}") 

我知道没有任何回报。如果foo的值包含在b.bar列中,则需要将其返回。

如果foo = "a",我会得到一个结果,但foo可以有多个值。

使用Ruby 2.2.5的Im。 Rails 5. DB:PostgreSQL

如果代码非常简单,将升级到Ruby 2.3。

+1

这可以通过使用多个'LIKE'条件与'OR'或正则表达式结合来完成。但它真的值得吗?有些查询通常很慢,因为它们不能使用索引。一个更好的解决方案是对数据进行规范化处理,并将具有'has_and_belongs_to_many'关联性的'foos'表关联到'B'。您可能需要考虑更改数据库模式。 – spickermann

+0

我在想同样的事情。我可能需要像你说的那样改变模式。 – Sylar

回答

0

你应该做的实际查询之前的一些前期工作,开始建设like条件在分隔的,列表,然后每个项目与逻辑or链接它们:

conditions = b.bar.split(',').map{|x| B.arel_table[:bar].matches("%#{x}%") } 

B.where conditions.reduce(:or) 
0

这是找到一个场比赛中的数组的方式:

B.where(bar: ["a", "b", "c"]) 

它将使用SQL IN operator