【问题标题】:How do I remove a value from a JSONB array column in Rails/Postgres?如何从 Rails/Postgres 中的 JSONB 数组列中删除值?
【发布时间】:2021-11-24 14:18:48
【问题描述】:

鉴于此列类型:

# 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]>

【问题讨论】:

    标签: ruby postgresql ruby-on-rails-6


    【解决方案1】:

    使用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
    => ... }]}]>
    

    【讨论】:

      猜你喜欢
      • 2015-07-12
      • 2019-09-03
      • 1970-01-01
      • 2021-02-28
      • 1970-01-01
      • 2019-01-23
      • 2019-09-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多