我有一个名为Box的Rails模型。每个Box对象都有一列:products,它是一个字符串数组,包含当时存储在其中的所有产品。
对于每个Box对象,可能是相同的值存储在另一个Box中。
我是否可以使用一个查询来返回存储在以下内容中的值x的所有Box?
我知道“where”用于查找具有特定值的对象,并且使用数组可能会使用“include?”,但是在这种情况下我无法找到一种方法,如果它可能的话
答案 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