我在 PostgreSQL 实例上运行的 Rails (5.1.6) 应用程序有这个问题。
我有一个带有 JSON 类型列的模型 (t.json :meta
)。该模型有一个商店访问器,如
store :meta, accessors: [:title], 编码器: JSON
现在的问题是当我设置这个值时它在数据库中显示为
"{\"title\":\"我是一个title\"}"
使它成为文本而不是 JSON 值,这反过来使我无法使用 JSON 查询运算符 (->>
) 来查询我的 JSON 字段。我已经尝试过不使用编码器选项,但这导致它被保存为 YAML。
序列化函数也没有为我改变任何东西(添加 serialize :meta, JSON
)
感谢任何帮助!
最佳答案
serialize和 store不适用于 native JSON 列。它们的目的是将数据编码和取消编码到字符串列中。
在 native JSON 支持存在(并由 ActiceRecord 支持)之前,这是一个“穷人”JSON 存储。如您所见,在 JSON 列上使用它会产生双重编码的字符串。
实际上,您无需执行任何操作即可使用 JSON 列。它由适配器处理。
参见:
关于ruby-on-rails - 保存时引用 Rails JSON 存储值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49904861/