Rails rename_column移行問題
-
13-09-2019 - |
質問
既存のデータベースで移行を実行して、テーブルの列名を変更しようとしています。移行を実行すると、BLOB/テキストフィールドにデフォルト値がないことを示すエラーが発生します。問題の列は、非ヌル属性を備えたテキスト列ですが、デフォルト値はありません。
Railsが試みる移行は次のとおりです。
他の机 xxxxx
変化する abcd
ABCD
テキストデフォルト '' nullではありません
今、私は移行に列の種類を変更するように頼んでいないので、列の名前を変更するように依頼しただけなので、なぜ移行が列タイプに何かをしようとしているのですか?
私はこの問題をグーグルで検索しましたが、説明や回避策を考え出していません。
どんな助けも感謝しています。
ヴィクラム
解決
ここで説明するように、この問題に関する長年の未解決のチケットがあるようです。
Railsのデフォルトの動作は、ブランク文字列をRubyに戻すときに存在チェックなどで誤検知を防ぐため、nullの列を作成することです。 MySQLコンソールのnull値を使用してテキスト列を再定義することで、これを回避できる可能性はありますか?
編集
これを移行ファイルで行うことができます。それはRailsの方法ではありませんが、ローカルコピーを変更するためにすべての人にメールを送信するよりもはるかに優れています。
MyModel.connection.execute "ALTER TABLE xxxxx CHANGE abcd ABCD text DEFAULT NULL"
所属していません StackOverflow