Каждая миграция выполняется внутри транзакции. Запомни. Это означает, что если что-то пойдет не так в рамках одной миграции, миграция будет отменена (и если есть какие-либо последующие, они не будут выполнены).
Для проверки миграций, будь то up
или down
Я вставляю множество операторов put, чтобы проверить, все ли сработало, и затем в моей последней строке я поднимаю исключение. Это заставит рельсы думать, что миграция не удалась, и откатит операцию (как если бы это никогда не происходило).
Когда я уверен, что все работает как надо, я удаляю линию повышения и позволяю миграции действительно работать.
В вашем случае вы бы протестировали с рейзом, удалили рейз и НЕ запустили бы его снова, я полагаю :)
Надеюсь, это поможет.