Active Record Array阵列查询-检查阵列中存在的记录

时间:2018-07-31 12:18:37

标签: ruby-on-rails ruby activerecord

我有一个Objective模型,该模型具有称为标签的属性,其值是数组数据类型。我需要查询所有其labels属性具有某个特定数组中存在的值的Objectives。

例如: 我有一个数组

a = ["textile", "blazer"]

Objective.labels的值可能为["textile, "ramen"]

我需要返回所有可能将“纺织品”或“开拓者”作为其标签数组值之一的目标

我尝试了以下操作:

Objective.where("labels @> ARRAY[?]::varchar[]", ["textile"])

这将返回一些记录。现在,当我尝试

Objective.where("labels @> ARRAY[?]::varchar[]", ["textile", "Blazer"])

我希望它返回包含至少一个标签数组值的所有Objectives作为Textile或Blazer。

但是,它返回一个空数组。有解决方案吗?

1 个答案:

答案 0 :(得分:1)

尝试使用&&重叠运算符。

  

重叠(具有相同的元素)

Objective.where("labels && ARRAY[?]::varchar[]", ["textile", "Blazer"])

如果您有很多行,则GIN索引可以加快速度。