既に存在するテーブルにadd_columnでNot Nullなカラムを追加しようとする。
例えば、foosテーブルにnot nullのuser_idを追加するmigrationを記述すると次のようになる。
class AddUserToFoos < ActiveRecord::Migration def change add_column :foos, :user_id, :integer, :null => false end end |
これを使ってrake db:migrateすると、
"Cannot add a NOT NULL column with default value NULL..." |
といったようにデフォルト値がNullのNot Nullなカラムを作れないと怒られてしまう。
これは変更対象のテーブルにレコードが存在しなくても同様のエラーとなる。
これの解決方法は、一度null許容なカラムを追加して、後にnot nullに変更するというアプローチで良い模様。
class AddUserToFoos < ActiveRecord::Migration def up add_column :foos, :user_id, :integer change_column :foos, :user_id, :integer, :null => false end def down remove_column :foos, :user_id end end |
参考
Adding a Non-null Column with no Default Value in a Rails Migration
http://strd6.com/2009/04/adding-a-non-null-column-with-no-default-value-in-a-rails-migration/
[Ruby on Rails][SQLite3] SQLException: Cannot add a NOT NULL column with default value NULL
http://codenote.net/ruby/rails/1041.html