检查attr数组是否包含Rails中给定数组中的任何元素

时间:2015-08-23 10:36:14

标签: ruby-on-rails arrays postgresql

我有一个项目列表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,但它看起来并不好看。如何进行这样的查询?

1 个答案:

答案 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]]]