ruby - 如何从 Rails/Postgres 中的 JSONB 数组列中删除值?
问题描述
鉴于此列类型:
# schema.db
create_table "users", force: :cascade do |t|
..
t.jsonb "details", array: true
...
end
如何按索引删除值?我的尝试最终保存nil
在索引处。
u = User.find(1).details
=> [{"group"=>[{"type"=>"website", "value"=>"https://www.stackoverflow.com/"}, {"type"=>"phone", "value"=>"212 111 1212"}]}, {"group"=>[{"type"=>nil, "value"=>nil}]}]
u.details[1] = nil
u.save
=> ... }]}, nil]>
解决方案
使用Array.delete_at(index)
方法
u = User.find(1).details
=> [{"group"=>[{"type"=>"website", "value"=>"https://www.stackoverflow.com/"}, {"type"=>"phone", "value"=>"212 111 1212"}]}, {"group"=>[{"type"=>nil, "value"=>nil}]}]
u.delete_at(1)
u.save
=> ... }]}]>
您甚至可以从嵌套数组中删除元素
u = User.find(1).details
=> [{"group"=>[{"type"=>"website", "value"=>"https://www.stackoverflow.com/"}, {"type"=>"phone", "value"=>"212 111 1212"}]}, {"group"=>[{"type"=>nil, "value"=>nil}]}]
u["group"].delete_at(2)
u.save
=> ... }]}]>
推荐阅读
- java - 使用 dfs 和 Map 对二叉树进行垂直顺序遍历
- swift - 在 OperationQueue 中打印 1 到 10 不打印整数
- php - 如何从目标字符串中的源字符串中查找任何单词并从 PHP 中的目标字符串中删除所有匹配的单词
- listview - 如何从 Syncfusion 列表视图中获取可见项目?
- python - 即使在向数据框中添加一列后,我的形状仍然保持不变,这意味着我无法向我的数据框添加一列
- reactjs - 我正在尝试设置 jsconfig.json 但我收到此错误
- azure - 从 Azure Blob 存储获取文件时出现 400 Bad Request 错误,即使文件存在
- c# - 尝试将图像加载到位图/图片框 Visual Studio 2019 时出现问题
- optaplanner - 使用 OptaPlanner 解决客户优先考虑的 VRP:高、标准或低
- ios - 如果长度小于规定长度,如何向组合字符串添加更多字符串?