【Rails】マイグレーションファイルをmigrateする前に戻す方法(その他マイグレーション関連のコマンド)
be rails db:migrate:statusでmigrateの状況を確認。
upになっているファイルがmigrateされている。
$ be rails db:migrate:status database: zero_calorie_development Status Migration ID Migration Name -------------------------------------------------- up 20200802075924 Create meal records up 20200802080924 Create active storage tablesactive storage up 20200804123950 Create foods
be rails db:rollback STEP=3で3つのファイル(最新順)をmigrate前に戻す。
$ be rails db:rollback STEP=3
== 20200804123950 CreateFoods: reverting ======================================
-- drop_table(:foods)
-> 0.0920s
== 20200804123950 CreateFoods: reverted (0.0986s) =============================
== 20200802080924 CreateActiveStorageTables: reverting ========================
-- drop_table(:active_storage_attachments, {})
-> 0.1429s
-- drop_table(:active_storage_blobs, {})
-> 0.0940s
== 20200802080924 CreateActiveStorageTables: reverted (0.2376s) ===============
== 20200802075924 CreateMealRecords: reverting ================================
-- drop_table(:meal_records)
-> 0.0528s
== 20200802075924 CreateMealRecords: reverted (0.0530s) =======================
Model files unchanged.
downになっているファイルは、migrateされる前の状態に戻ったということ。
down状態のファイルは直接編集おk。
(ただし、「新機能を実装するためにFoodテーブルと他のテーブルにアソシエーションを組みたい」といった場合、rollbackするのではなく新しくマイグレーションファイルを作成してあげればよい。マイグレーションファイルは歴史の積み重ね的なやつだから時系列で残してあげた方がよいと思われる)
$ be rails db:migrate:status database: zero_calorie_development Status Migration ID Migration Name -------------------------------------------------- down 20200802075924 Create meal records down 20200802080924 Create active storage tablesactive storage down 20200804123950 Create foods
$ be rails db:migrate
== 20200802075924 CreateMealRecords: migrating ================================
-- create_table(:meal_records)
/Users/funesakisuke/workspace/app/zero_calorie/vendor/bundle/ruby/2.7.0/gems/migration_comments-0.4.1/lib/migration_comments/active_record/connection_adapters/mysql2_adapter.rb:39: warning: Using the last argument as keyword parameters is deprecated; maybe ** should be added to the call
/Users/funesakisuke/workspace/app/zero_calorie/vendor/bundle/ruby/2.7.0/gems/activerecord-6.0.3.2/lib/active_record/connection_adapters/mysql/schema_statements.rb:80: warning: The called method `create_table' is defined here
/Users/funesakisuke/workspace/app/zero_calorie/vendor/bundle/ruby/2.7.0/gems/migration_comments-0.4.1/lib/migration_comments/active_record/connection_adapters/table_definition.rb:10: warning: Using the last argument as keyword parameters is deprecated; maybe ** should be added to the call
/Users/funesakisuke/workspace/app/zero_calorie/vendor/bundle/ruby/2.7.0/gems/activerecord-6.0.3.2/lib/active_record/connection_adapters/abstract/schema_definitions.rb:364: warning: The called method `column' is defined here
-> 0.0480s
== 20200802075924 CreateMealRecords: migrated (0.0481s) =======================
== 20200802080924 CreateActiveStorageTables: migrating ========================
-- create_table(:active_storage_blobs, {})
-> 0.0524s
-- create_table(:active_storage_attachments, {})
-> 0.0477s
== 20200802080924 CreateActiveStorageTables: migrated (0.1003s) ===============
== 20200804123950 CreateFoods: migrating ======================================
-- create_table(:foods)
-> 0.0516s
== 20200804123950 CreateFoods: migrated (0.0517s) =============================
Annotated (3): app/models/meal_record.rb, spec/models/meal_record_spec.rb, spec/factories/meal_records.rb
$ be rails db:migrate:status database: zero_calorie_development Status Migration ID Migration Name -------------------------------------------------- up 20200802075924 Create meal records up 20200802080924 Create active storage tablesactive storage up 20200804123950 Create foods
その他コマンド
- 全てのテーブルをドロップして、全てのmigrationを実行してテーブルの再作成を行う。
be rails db:migrate:reset