ruby-on-rails - Rails 模型 - 更新 JSON 中的嵌套键/值

标签 ruby-on-rails json ruby postgresql

我有一个具有以下表格格式的模型:

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/

相关文章:

javascript - 如何使用 jQuery 将值与 JSON 对象中的名称进行匹配?

java - 在 JBoss 中使用 MOXy 创建 JAXBContext 时出现 StackOverflow 错误

ruby-on-rails - 取消ajax请求导致rails抛出异常

ruby - 追踪 Ruby 脚本中的内存泄漏

ruby-on-rails - 使用地理编码器 gem 进行验证

ruby-on-rails - rSpec Shoulda 匹配器测试验证

css - rails : How to set a background image in rails from css?

jquery - Rails 中的客户端验证以及 jQuery slider 中的表单

javascript - Nodejs http.request 如何将 json 参数发送到 java 接口(interface)

ruby - gem 安装失败,显示 "ruby: invalid option -H (-h will show valid options) (RuntimeError)"