【发布时间】:2019-08-13 18:13:33
【问题描述】:
我有一个大型 json 对象存储在 postgres 表列中,架构示例如下:
create_table “document” do |t|
t.jsonb “data”, default: []
end
目前我正在更新列中的 json,如下所示:
# find document in rails then…
doucment.data[‘some_attribute’][2][‘another_attribute’] = 100
doucment.save
但是我多次写入这个 json 属性,有时数据会丢失,因为如果两个调用同时写入它,那么整个对象将被保存或用当前对象的旧数据覆盖。
例如,如果有两个不同的保存同时进行以下操作
保存 1:
doucment.data[‘some_attribute’][2][‘another_attribute’] = 100
doucment.save
保存 2:
doucment.data[‘some_attribute’][2][‘different_attribute’] = 200
doucment.save
那么任何一个属性数据都将丢失,因为另一个将保存它的 json 但带有尚未刷新的旧数据。
让这两个调用正确保存新数据的最佳方法是什么。
是否有任何 json 方法可以只进入并更新一个属性,例如 update_attribute 但对于 jsonb 属性?
【问题讨论】:
-
你用的是什么版本的rails?
-
我的回答有用吗?
-
@ErvalhouS 这是轨道 5.2.3
标签: ruby-on-rails json postgresql jsonb