Миграции, несомненно, лучше, чем просто запуск phpMyAdmin и изменение схемы вольно-невольно (как я делал в течение моих дней php), но после их использования на некоторое время, я думаю, что они смертельно несовершенны.
Контроль версий - это решенная проблема. Основная функция миграции - вести историю изменений в вашей базе данных. Но хранить разные файлы для каждого изменения - неуклюжий способ их отслеживания. Вы не создаете новую версию post.rb
(или файл, представляющий дельту), когда хотите добавить новый атрибут virtual - зачем создавать новую миграцию, когда вы хотите добавить новый не виртуальный атрибут?
Другими словами, точно так же, как вы проверяете post.rb
в управлении версиями, почему бы не зайти в schema.rb в управление версиями и не внести изменения в файл напрямую?
Функционально это то же самое, что хранить файл для каждой дельты, но с ним гораздо проще работать. Моя ментальная модель такова: «Я хочу, чтобы таблица X имела такие-то и такие-то столбцы (или действительно, я хочу, чтобы модель X имела такие-то и такие-то свойства)» - почему вы должны из этого сделать вывод, как добраться из существующей схемы; просто откройте schema.rb
и дайте таблице X правильные столбцы!
Но даже идея, что классы переносят таблицы, является деталью реализации! Почему я не могу просто открыть post.rb
и сказать:
Class Post
t.string :title
t.text :body
end
Если бы вы использовали такую модель, вам нужно было бы принять решение о том, что делать с существующими данными. Но даже в этом случае миграции излишни - когда вы переносите данные, вы теряете верность, когда используете метод миграции down
.
В любом случае, мой вопрос таков: , даже если вы не можете придумать лучшего пути, разве миграция не является такой уж большой?