Я бы всегда использовал № 2. # 4 - действительно ужасный макет, и он может быть сделан только тем, кто считает, что метод должен иметь длину экрана в один размер, и сделает все, чтобы его запихнуть, а не рефакторинг кода !!!
Каждый раз, когда вы создаете миграцию с использованием сценариев (например, script / generate модель ...) новая миграция добавляется в правильный каталог, готовый для синхронизации с реальной базой данных.
Фактически rake db: migrate просто проверяет, какие недостающие миграции все еще нужно применить к базе данных, не заботясь о предыдущих .
Миграция означает, что вы переходите от текущей версии к более новой (как сказано в первом ответе). Используя rake db:migrate, вы можете применить любые новые изменения к вашей схеме. Но если вы хотите откатиться к предыдущей миграции, вы можете использовать rake db:rollback, чтобы аннулировать ваши новые изменения, если они определены неправильно. Внимание: при этом ваши данные будут потеряны.
Когда вы используете миграции rails, автоматически создается таблица с именем schema_migrations
, которая отслеживает, какие миграции были применены, сохраняя номер версии каждой миграции (это - это число, которое предшествует имени миграции в имени файла, например db / migrate / _20090617111204__migration.rb). Когда вы запускаете rake db: migrate
для миграции вверх, будут выполняться только миграции, которые не выполнялись ранее (т.е. их версия не указана в таблице) (по этой причине изменение миграции, которая уже выполнено не будет иметь никакого эффекта при запуске db: migrate
). При миграции все версии, найденные в schema_migrations
, которые больше версии, к которой вы выполняете откат, будут отменены.