【问题标题】:Rails JSON store value gets quoted upon savingRails JSON 存储值在保存时被引用
【发布时间】:2018-09-28 23:59:59
【问题描述】:

我的 Rails (5.1.6) 应用程序在 PostgreSQL 实例上运行时遇到了这个问题。

我有一个带有 JSON 类型列的模型 (t.json :meta)。该模型有一个类似的商店访问器

store :meta, accessors: [:title], coder: JSON

现在的问题是当我设置这个值时,它在数据库中显示为

"{\"title\":\"I am a title\"}"

使其成为文本而不是 JSON 值,这反过来又使我无法使用 JSON 查询运算符 (->>) 来查询我的 JSON 字段。我已经尝试不使用 coder 选项,但这会导致它被保存为 YAML。 序列化功能对我也没有任何改变(添加serialize :meta, JSON

感谢您的任何帮助!

【问题讨论】:

    标签: ruby-on-rails json ruby postgresql


    【解决方案1】:

    serializestore 不适用于本机 JSON 列。它们的目的是将数据编组和取消编组到字符串列中。

    在原生 JSON 支持存在(并且由 ActiceRecord 支持)之前,这是一个“可怜的”JSON 存储。如您所见,在 JSON 列上使用它会产生双重编码的字符串。

    您实际上无需执行任何操作即可使用 JSON 列。它由适配器处理。

    见:

    【讨论】:

    • 好的,感谢您直截了当。是否有一种简单的方法可以为 JSON 中的数据定义访问器?所以我不必每次想访问标题时都调用meta["title"]
    • 在这里回答我自己的问题; store_accessor 这样做。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-29
    • 2013-09-11
    • 2013-12-31
    • 1970-01-01
    • 1970-01-01
    • 2011-01-21
    相关资源
    最近更新 更多