gpt4 book ai didi

ruby-on-rails - Rails Scope for JSONB Hash with Array for Value

转载 作者:行者123 更新时间:2023-11-29 13:11:58 25 4
gpt4 key购买 nike

我正在使用 JSONB 列,其中数据存储为 { key => [value, value, value ] }如何编写一个作用域来返回包含特定键数组中特定值的记录?

我已经弄清楚如何搜索简单的 JSON 哈希;

scope :rice_flour, -> { where("ingredients ->> 'flour' = ?", "rice") }

...但是我仍然无法理解这种查询类型。我查找的所有内容都以原始 SQL 命令列出,我正在寻找如何编写整洁的 Rails Scopes。

最佳答案

使用 @> 运算符:

postgres@/> select '["a", "b"]'::jsonb @> '["a"]';
+------------+
| ?column? |
|------------|
| True |
+------------+

postgres@/> select '["a", "b"]'::jsonb @> '["c"]';
+------------+
| ?column? |
|------------|
| False |
+------------+

https://www.postgresql.org/docs/10/functions-json.html

你的范围将是这样的:

scope :rice_flour, -> { 
.where("ingredients -> 'flour' @> '[\"rice\"]'::jsonb")
}

这将生成如下 SQL:

WHERE (ingredients -> 'flour' @> '["rice"]'::jsonb)

假设 flour 是键,rice 是数组中的值之一。

关于ruby-on-rails - Rails Scope for JSONB Hash with Array for Value,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53641703/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com