Я также искал решение для исправления файла schema.rb для перечислений, так как RoR (версия 3.1.3 на данный момент) называет их строкой с пределом 0.
Похоже, есть плагин / гем для обработки типов перечислений без изменения базы данных. На Rails 1 и 2 подключаемый модуль: http://enum -column.rubyforge.org /
На Rails 3 есть драгоценный камень, похожий на этот: https://github.com/electronick/enum_column
После добавления enum_column3 в ваш Gemfile (и запуска обновления пакета) или установки плагина, затем запустите задачу rake db: schema: dump для регенерации файла schema.rb.
Единственный недостаток этого плагина / драгоценного камня, который я вижу, это то, что вы должны изменить код в своем приложении, использующем эти поля (поэтому вы должны найти все), со строк на символы и validates_inclusion_of для validates_columns. Тем не менее, у меня не заняло много времени это сделать с помощью grep и vi.
В качестве альтернативы вы можете сделать, как сказал выше Роберт, и напрямую изменить MySQL, чтобы он соответствовал ожиданиям RoR. Но я лично предпочитаю продолжать использовать типы Enum. (У меня есть фон LAMP.) Обработка enum как varchar с использованием validates_inclusion_of в модели прекрасно работает для всего, что не использует schema.rb. Просто тесты и миграции имеют проблемы.
Или же вы можете продолжить редактирование файла schema.rb вручную, чтобы установить ограничение. (Это то, что мы делали до сих пор, но это раздражает.)
(Думаю, у меня недостаточно точек повторения для добавления комментариев? Ответ Стива раздражает меня. Вы определенно хотите использовать миграции, потому что тогда вы гарантируете, что внесете те же изменения в dev, что и в производстве. Это слишком просто чтобы сделать ошибку даже при копировании-вставке SQL во время развертывания. Поверьте, я знаю это по своему опыту. Плюс миграции - это стандартное место для сохранения изменений. И, возможно, вам придется повторно применять их, если вы восстанавливаете из более старая резервная копия.)