我有一个具有以下表格格式的模型:
string "name"
integer "line_id"
json "filters"
其中 filters
字段包含一个带有嵌套键的 json 对象。我想修改一个特定的键而不覆盖其余的 json。
目前filters
中存储的json对象是这样的
{
"ext": {"name": "filter", "id": 3},
"int": {"name": "numb", "id": 1}
}
我正在尝试将 int.name
的值更新为 "remove"
,而不修改 json 对象的其余部分。
如果我执行以下操作,它将简单地覆盖整个 json 对象,而不是修改该特定键:
Model.where("filters->>'int'->>'name' IS NOT NULL").update(
filters: {
int: {
name: "remove"
}
}
)
我怎样才能简单地用路径 int.name
更新那个键,同时保持其余属性不变?
最佳答案
您使用的是哪个版本的 Rails?如果您使用的是 Rails 5,您应该能够
m = Model.where("filters->>'int'->>'name' IS NOT NULL").first
m.filters['name'] = 'remove'
m.save
这将保留现有的哈希键。
我认为对于 Rails 4,您需要现场使用 json 序列化程序,但我相信,一旦您拥有序列化程序,应该可以以相同的方式工作。
关于ruby-on-rails - Rails 模型 - 更新 JSON 中的嵌套键/值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50515419/