繁体   English   中英

在Rails 3.2中修改Postgres JSON字段时出错

[英]Error when modifying Postgres JSON field in Rails 3.2

我正在尝试在我的Rails 3.2应用程序中使用JSON(Postgres 9.3,而不是JSONB)字段类型。

我已经使用以下迁移创建了该字段而没有任何问题:

def change
  add_column :blocks, :meta, :json
end

但是,当我试图像这样修改字段时:

b.meta = {name: "John"}
b.save

我收到以下错误:

ActiveRecord::StatementInvalid: PGError: ERROR:  invalid input syntax for type json
LINE 1: UPDATE "blocks" SET "meta" = '---

我甚至不确定Rails 3.2中是否支持JSON类型,但我已经看到一些帖子尽可能地谈论它(虽然没有关于它是如何工作的细节)。

我认为你是正确的,Rails 3中的ActiveRecord本身不支持JSON。 您的错误的原因是,给定复杂的数据类型(在本例中为Hash),ActiveRecord将首先将其序列化为字符串,默认序列化为YAML。 这就是你的错误信息中的---来自 - 它是YAML标题。

一个快速的解决方案是在将Hash分配给您的属性之前将其转换为JSON:

hsh = { name: "John" }
b.meta = hsh.to_json
b.save

不过,这将变得乏味。 相反,在序列化此属性时,您可以告诉ActiveRecord使用JSON而不是YAML:

class Block < ActiveRecord::Base
  serialize :meta, JSON
end

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM