ryota21silvaの技術ブログ

Funna(ふんな)の技術ブログ

これまで学んだ技術の備忘録。未来の自分が救われることを信じて

【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