ruby-on-rails - 如何将 Rails 中的_column 从字符串更改为 jsonb?

标签 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

但是,无法CAST 现有字符串到 jsonb:

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”是带有连字符“Non-commutative”的字符串的开头。

2) 由于现有值,我需要定义一个默认键。

有人可以帮忙吗?谢谢!

最佳答案

你应该尝试如下:

  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

就是这样。

关于ruby-on-rails - 如何将 Rails 中的_column 从字符串更改为 jsonb?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46545478/

相关文章:

ruby-on-rails - 如果一条记录无效,Rails accepts_nested_attributes_for 不保存任何嵌套记录

ruby-on-rails - ruby - bundle 安装/更新太慢

ruby-on-rails - Ruby/Rails 的编码风格检查器或代码格式化器

python - 在 Django 中使用相关对象批量创建对象的有效方法是什么?

sql - PostgreSQL 间隔错误

java - 是否可以编写一个 jOOQ 转换器来应用于数组?

ruby-on-rails - 如何向 form_with 添加隐藏字段?

ruby-on-rails - Ruby on Rails : validate when context is not given value

php - $1 与 coalesce($1) 的数据类型

sql - postgres 列 "X"不存在