我尝试在Rails 5.0.2中编写现有列的迁移:
def up
change_column(:sales_deals, :lost_reason, 'jsonb USING CAST(lost_reason AS jsonb)')
end
def down
change_column(:sales_deals, :lost_reason, 'string USING CAST(lost_reason AS string)')
end
但是,{joneb {/ 1>}现有字符串CAST
失败了
PG::InvalidTextRepresentation: ERROR: invalid input syntax for type json
DETAIL: Token "Non" is invalid.
CONTEXT: JSON data, line 1: Non...
: ALTER TABLE "sales_deals" ALTER COLUMN "lost_reason" TYPE jsonb USING CAST(lost_reason AS jsonb)
我的猜测是有两个问题:
1)我需要指定值的类型,因为标记“Non”是带有连字符“非交换”的字符串的开头。
2)由于现有的值,我需要定义一个默认密钥。
有人可以帮忙吗?谢谢!
答案 0 :(得分:1)
你应该尝试如下:
def up
change_column :sales_deals, :lost_reason, :jsonb, using: 'CAST(value AS JSON)'
end
def down
change_column :sales_deals, :lost_reason, :text
end
那就是它。