カラムの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