私のRails(3.2)アプリケーションでは、データベースにたくさんのテーブルがありますが、いくつかのnull以外の制約を追加するのを忘れました。私は周りを探索したが、私はどのように既存の列にnullを追加する移行を記述することができません見つけることができません。Ruby on Rails:マイグレーションを使用して既存の列にnot null制約を追加するにはどうすればよいですか?
TIA。
私のRails(3.2)アプリケーションでは、データベースにたくさんのテーブルがありますが、いくつかのnull以外の制約を追加するのを忘れました。私は周りを探索したが、私はどのように既存の列にnullを追加する移行を記述することができません見つけることができません。Ruby on Rails:マイグレーションを使用して既存の列にnot null制約を追加するにはどうすればよいですか?
TIA。
change_columnをお試しください:
change_column :table_name, :column_name, :column_type, null: false
ます。またchange_column_nullを使用することができます。
change_column_null :table_name, :column_name, false
1)FIRST:デフォルト値
2でカラムを追加)THEN:デフォルト値を削除
add_column :orders, :items, :integer, null: false, default: 0
change_column :orders, :items, :integer, default: nil
これは、NULLでない新しい列を追加する必要がある場合、SQLLiteが(デフォルト値NULLでNOT NULL列を追加できない)ため、デフォルト値を持つことを最初に定義する必要がある場合に、正しい解決策です。 – Mil4n
この方法に注意してください。 - その列に関する他の属性(たとえば ':limit'制約)がある場合、' change_column'を使用するときにそれらの属性を繰り返す必要があります。そうしないと属性が失われます。この理由から、私は 'change_column_null'を使うことを好みます。 –
これはあなたが望むものではないかもしれない' IrreversibleMigration'を生成することに注意してください。 –
@NicNilovあなたは答え、またはNathan Wallaceのコメントについて話していますか? – Mark