如何将Rails中的change_column从string更改为jsonb?

时间:2017-10-03 13:14:02

标签: ruby-on-rails postgresql

我尝试在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)由于现有的值,我需要定义一个默认密钥。

有人可以帮忙吗?谢谢!

1 个答案:

答案 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

那就是它。