2014-10-06 62 views
2

我有一个名为Box的Rails模型。每个Box对象都有一个列:产品,这是一个字符串数组,包含当时存储在其中的所有产品。选择包含数组属性值的Rails对象

对于每个Box对象,可能相同的值存储在另一个Box中。

是否有一个查询,我可以用来返回所有的价值x存储在框中的产品?

我知道“where”适用于查找具有特定值的对象,并且您可能使用“include?”的数组,但在遇到这种情况时无法使用任何方法可能。

回答

3

有这项工作之前,这里张贴解答编辑得不错,但我环顾四周,发现另一个更简洁的查询。

selected_boxes = Box.where("?=ANY(products)", x)

其中x是您正在寻找中的每个对象的值。

+0

我正在使用Rails 4.2.5,我无法使用此查询。它说“错误的参数数量(给定2,预期1)” – 2017-03-17 05:33:35

+0

一直试图找出一小时。谢谢。不知道为什么这没有更多的选票。 – 2017-06-15 01:32:07

0

范围!

scope :contains, ->(items) { where("products LIKE ?", "%#{items.to_yaml}%") } # items is an array of your potential strings 

所以你把这个作为Box.contains(%w(foo bar))Box.contains(['some thing'])

传递数组应该让你同时搜索多个项目...

您可以随意命名范围什么,显然

像MySQL的ILIKE PostgreSQL的

相关问题