カラムのNOT NULL制約(null: false)を途中で設定or削除する方法(Rails)

f:id:ryoutaku_jo:20190826014034p:plain

【結論】

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

《今日の学習進捗(3年以内に10000時間に向けて)》

学習開始からの期間 :261日
今日までの合計時間:2458h
一日あたりの平均学習時間:9.5h
今日までに到達すべき目標時間:2384h
目標との解離:74h
「10,000時間」まで、

残り・・・「7542時間!」