rake db:rollbackでadd_indexするときは注意
migrationでunique制約の付いたindexを削除するために以下のmigrationファイルを作成します。
def up
remove_index :tables, :column
end
def down
add_index :tables, :column, :unique => true
end
これをmigrateしてもこの時点では問題ありません。
但し、columnの内容が重複するレコードが存在した状態で、元に戻すと以下のエラーになります。
rake db:rollback
Mysql2::Error: Duplicate entry '' for key 'index_tables_on_column': CREATE UNIQUE INDEX `index_tables_on_column` ON `tables`   (`column`)
unique制約のindexが作成されると、既存のレコードに制約チェックが掛かるのでエラーとなりますね。
これを回避するには、以下の方法が考えられます。
- テーブルを空にしておく
- 制約チェックに引っかからないように、データの内容をセットしておく