选择包含数组属性值的Rails对象
问题描述:
我有一个名为Box的Rails模型。每个Box对象都有一个列:产品,这是一个字符串数组,包含当时存储在其中的所有产品。选择包含数组属性值的Rails对象
对于每个Box对象,可能相同的值存储在另一个Box中。
是否有一个查询,我可以用来返回所有的价值x存储在框中的产品?
我知道“where”适用于查找具有特定值的对象,并且您可能使用“include?”的数组,但在遇到这种情况时无法使用任何方法可能。
答
有这项工作之前,这里张贴解答编辑得不错,但我环顾四周,发现另一个更简洁的查询。
selected_boxes = Box.where("?=ANY(products)", x)
其中x是您正在寻找中的每个对象的值。
答
范围!
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的
我正在使用Rails 4.2.5,我无法使用此查询。它说“错误的参数数量(给定2,预期1)” – 2017-03-17 05:33:35
一直试图找出一小时。谢谢。不知道为什么这没有更多的选票。 – 2017-06-15 01:32:07