我有一个项目列表Obj:
obj1.val = ["foo"]
obj2.val = ["bar"]
obj3.val = ["bar", "foo"]
我有一个数组check_list = ["foo","bar"]
我知道像Obj.where('val @> ARRAY[?]', check_list)
这样的代码会返回obj3
,因为它包含“foo”和“bar”但我想创建一个返回所有项目的函数。
我在思考一些循环:基于check_list.each
,但它看起来并不好看。如何进行这样的查询?
答案 0 :(得分:1)
请使用&&
重叠运算符。
Obj.where('val && ARRAY[?]', check_list)
试过示例:
development=# select id, group_ids from users;
id | group_ids
----+-----------
1 | {1}
2 | {1,2}
3 | {2}
(3 rows)
[arup@sampl_admin (master)]$ rails c
Loading development environment (Rails 4.2.3)
>> User.where('group_ids && ARRAY[?]', [1, 2]).pluck(:id, :group_ids)
(1.0ms) SELECT "users"."id", "users"."group_ids" FROM "users" WHERE (group_ids && ARRAY[1,2])
# => [[1, [1]], [2, [1, 2]], [3, [2]]]