Railsのmigrationで後からNULL制約を設定する
Railsのmigrationで後からNULL制約を設定する - Qiita からの転載です。
NULL制約の追加には change_column_null
を使います。
引数にはテーブル名、カラム名、null falseかtrueか、変更後のデフォルト値
class ChangePointColumnOnPost < ActiveRecord::Migration[5.2] def change change_column_null :posts, :point, false, 0 end end
これだとちょっと問題が…
ここで設定されるdefaultは現在nullのカラムを変更するためだけのもので、テーブルの制約にdefault値が設定されるわけではないので、nullでレコードの追加をしようとした際にコケてしまいます。 そのため別でデフォルト値の設定が必要になります。
NULL制約追加+デフォルト0を設定するコード postsテーブルのpointカラムがNULL制約なし、デフォルトNULLになっているのを、NULL禁止、デフォルト0に変更するマイグレーションになります。
class ChangePointColumnOnPost < ActiveRecord::Migration[5.2] def up change_column_null :posts, :point, false, 0 change_column :posts, :point, :integer, default: 0 end def down change_column_null :posts, :point, true, nil change_column :posts, :point, :integer, default: nil end end