マイグレーションファイルに必要な情報を記述して、マイグレーションしようとしてエラー。
おかしいと思いつつまずはリセットを試みる。
% rails db:migrate:reset
↓↓↓以下結果↓↓↓
Dropped database 'protospace_32411_development'
Dropped database 'protospace_32411_test'
Created database 'protospace_32411_development'
Created database 'protospace_32411_test'
== 20201214092753 DeviseCreateUsers: migrating ================================
-- create_table(:users)
rails aborted!
StandardError: An error has occurred, all later migrations canceled:
Mysql2::Error: BLOB/TEXT column 'profile' can't have a default value
#以下略
何かがおかしい・・・
しかしその何かがわからない。
もう一度やってみよう。
% rails db:migrate
↓↓↓以下結果↓↓↓
== 20201214092753 DeviseCreateUsers: migrating ================================
-- create_table(:users)
rails aborted!
StandardError: An error has occurred, all later migrations canceled:
Mysql2::Error: BLOB/TEXT column 'profile' can't have a default value
#以下略
だめか。
ここでターミナルの出力結果をよく見ると同じエラー文にようやく気付く。
Mysql2::Error: BLOB/TEXT〜〜
どういうことかと調べてみたら、テーブルに対してNULL制約のついたカラムを追加したい場合はデフォルト値で問題ない。
しかしMySQLではBLOB/TEXT型にはdefault値を与えることができないためらしい。
マイグレーションファイルを確認すると
users.rb
t.string :name, null: false, default: ""
t.text :profile, null: false, default: nil #←ここが「""」になっていたため変更
default値を「nil」に変更して解決。
エラーを越えてエンジニアは強くなると、どこかで読んだ気がしましたがその気持ちが初めてわかりました。
一人で解決できるとスッキリ!
明日も頑張ります。