the*_*ish 2 ruby postgresql json ruby-on-rails
我有一个具有以下表格格式的模型:
string "name"
integer "line_id"
json "filters"
Run Code Online (Sandbox Code Playgroud)
其中filters字段包含带有嵌套键的 json 对象。我想修改特定的键而不覆盖 json 的其余部分。
目前,存储的 json 对象filters如下所示
{
"ext": {"name": "filter", "id": 3},
"int": {"name": "numb", "id": 1}
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试将int.name的值更新为 ,"remove"而不修改 json 对象的其余部分。
如果我执行以下操作,它将简单地覆盖整个 json 对象,而不是修改该特定键:
Model.where("filters->>'int'->>'name' IS NOT NULL").update(
filters: {
int: {
name: "remove"
}
}
)
Run Code Online (Sandbox Code Playgroud)
如何简单地用路径更新该一个键int.name,同时保持其余属性相同?
您使用的是哪个版本的 Rails?如果您使用的是 Rails 5,您应该能够
m = Model.where("filters->>'int'->>'name' IS NOT NULL").first
m.filters['name'] = 'remove'
m.save
Run Code Online (Sandbox Code Playgroud)
这将保留现有的哈希键。
我认为使用 Rails 4,您在现场需要一个 json 序列化器,但我相信,一旦您拥有序列化器,应该以相同的方式工作。