我尝试为 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/