カラムのNOT NULL制約(null: false)を途中で設定or削除する方法(Rails)
【結論】
・カラムのNOT NULL制約を途中で設定or削除するには、change_column_null
メソッドを利用してマイグレーションを行う
・change_column_null(table_name, column_name, null, default = nil)
・第3引数のnull
フラグに、true
を指定すればNOT NULL制約が適用され、false
をしてするとNOT NULL制約を外せる
【目次】
【本題】
NOT NULL制約の設定方法
カラムのNOT NULL制約を設定または削除するには、change_column_null
メソッドを利用してマイグレーションを行います。
change_column_null(table_name, column_name, null, default = nil)
第3引数のnull
フラグに、true
を指定すればNOT NULL制約が適用され、false
をしてするとNOT NULL制約を外せます。
NOT NULL制約を設定する場合には、以下の様に記述します。
class ChangeDescriptionToCampaign < ActiveRecord::Migration[5.2] def change change_column_null :posts, :name, false end end
NOT NULL制約を削除する場合には、以下の様に記述します。
class ChangeDescriptionToCampaign < ActiveRecord::Migration[5.2] def change change_column_null :posts, :name, true end end
なお、第4引数で値を指定すると、既存のNULLをその値に置き換えることが可能です。
この値がデフォルト値になるわけではないので、注意が必要です。
参考情報
ActiveRecord::ConnectionAdapters::SchemaStatements
Active Record マイグレーション - Railsガイド
change_column_null (ActiveRecord::ConnectionAdapters::SchemaStatements) - APIdock