2017-10-03 8 views
1

私はRailsの5.0.2での既存の列の移行を書き込もうとしました:Railsのstringからjsonbへのchange_columnの方法は?

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 

しかし、jsonbする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) 

私の推測があるあります2つの問題:

1)トークン "Non"がハイフン付き文字列の先頭であるため、値の型を指定する必要があります。 "Non-c賛成する "。

2)私は、既存の値のために、デフォルトキーを定義する必要があります。

誰でも助けてください。ありがとう!あなたは次のように試してみてください

答えて

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 

+0

あなたのソリューションは、いくつかのために働いたが、最後に移行がキャンセルされ、このエラーました: '' 'PG :: CannotCoerce:ERROR: LINE 1 jsonbするタイプの数値をキャストすることはできません:...のEALの」ALTER COLUMNを"lost_reason" TYPE jsonb USAST CAST(値... ^ :ALTER TABLE "sales_deals" ALTER COLUMN "lost_reason"タイプjsonb CAST(値AS jsonb) '' ' – ogirginc

+0

を使用すると、" using: notes :: JSON '"つまり、最初の行の" using "領域を置き換えてから試してみてください –

関連する問題