こつこつRailsやってます。 今日はこんなエラーに遭遇。
エラー
SQLite3を使う環境でrake db:migrate
したらこんなエラー。
== 20160105034748 AddColumnToUser: migrating ================================== -- add_column(:users, :permalink, :string, {:null=>false, :after=>:id}) rake aborted! StandardError: An error has occurred, this and all later migrations canceled: SQLite3::SQLException: Cannot add a NOT NULL column with default value NULL: ALTER TABLE "users" ADD "permalink" varchar NOT NULL/Users/naichi/unity-room/vendor/bundle/ruby/2.2.0/gems/sqlite3-1.3.9/lib/sqlite3/database.rb:91:in `initialize'
default value NULLのままじゃNOT NULL制約のついた列追加させねーよ!!って言ってるみたいですね。
明示的に決めさせるためにNOT NULL付けるんだよ!!defaultつけたら意味ないんだよ!!
確認
対象のmigrateファイルはこんな感じ。
class AddColumnToUser < ActiveRecord::Migration def change add_column :users, :permalink, :string, :null => false, :after => :id end end
対応
列追加と制約付与を別々に書いた。
class AddColumnToUser < ActiveRecord::Migration def up add_column :users, :permalink, :string, :after => :id change_column :users, :permalink, :string, :null => false end def down remove_column :users, :permalink end end
これでイケるとかどうなってんだよSQLite。。。