选择包含数组属性值的Rails对象

时间:2014-10-06 21:35:42

标签: ruby-on-rails arrays activerecord

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

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

我是否可以使用一个查询来返回存储在以下内容中的值x的所有Box?

我知道“where”用于查找具有特定值的对象,并且使用数组可能会使用“include?”,但是在这种情况下我无法找到一种方法,如果它可能的话

2 个答案:

答案 0 :(得分:3)

之前在这里发布了一个答案,这个答案运作得很好,但我环顾四周,发现另一个更简洁的查询。

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

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

答案 1 :(得分: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'])

传递数组应该允许您一次搜索多个项目......

您可以将范围命名为任何您想要的名称,显然

LIKE for mySQL ... ILIKE for postgreSQL