質問

既存のデータベースで移行を実行して、テーブルの列名を変更しようとしています。移行を実行すると、BLOB/テキストフィールドにデフォルト値がないことを示すエラーが発生します。問題の列は、非ヌル属性を備えたテキスト列ですが、デフォルト値はありません。

Railsが試みる移行は次のとおりです。

他の机 xxxxx 変化する abcd ABCD テキストデフォルト '' nullではありません

今、私は移行に列の種類を変更するように頼んでいないので、列の名前を変更するように依頼しただけなので、なぜ移行が列タイプに何かをしようとしているのですか?

私はこの問題をグーグルで検索しましたが、説明や回避策を考え出していません。

どんな助けも感謝しています。

ヴィクラム

役に立ちましたか?

解決

ここで説明するように、この問題に関する長年の未解決のチケットがあるようです。

Railsバグレポート

Railsのデフォルトの動作は、ブランク文字列をRubyに戻すときに存在チェックなどで誤検知を防ぐため、nullの列を作成することです。 MySQLコンソールのnull値を使用してテキスト列を再定義することで、これを回避できる可能性はありますか?

編集

これを移行ファイルで行うことができます。それはRailsの方法ではありませんが、ローカルコピーを変更するためにすべての人にメールを送信するよりもはるかに優れています。

MyModel.connection.execute "ALTER TABLE xxxxx CHANGE abcd ABCD text DEFAULT NULL"
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top