[英]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.