LoginSignup
0
0

More than 3 years have passed since last update.

【Ruby】テーブルに対してnull制約をつける場合

Posted at

マイグレーションファイルに必要な情報を記述して、マイグレーションしようとしてエラー。
おかしいと思いつつまずはリセットを試みる。

% 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」に変更して解決。
エラーを越えてエンジニアは強くなると、どこかで読んだ気がしましたがその気持ちが初めてわかりました。
一人で解決できるとスッキリ!
明日も頑張ります。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0