開発環境
・Rails6.0.0
マイグレーションファイルの生成とテーブル作成
マイグレーションファイルの生成は次の2パターン
①モデルを生成して自動で作られる場合
【コマンド】rails generate model モデル名
これにより、「db/migrate」の中に自動的にマイグレーションファイルが生成される。
②自分で作る
既存のテーブルにカラムを追加したい場合など。
(例)usersテーブルにnameカラム(型:string)を追加したい場合
【コマンド】rails generate migration add_name_to_users name:string
テーブルの作成
【コマンド】rails db:migrate
これでマイグレーションファイルの内容がテーブルに反映される。
結果はSequel Proなどでデータベースを更新して確認できる。
ちなみにターミナル上でマイグレーションファイルがテーブルに反映されているか確認することもできる。
【コマンド】rails db:migrate:status
「Status」が「up」になっていればテーブルに反映されている状態、「down」になっていればまだmigrateされていない状態です。
マイグレーションを取り消したい時
開発中に、マイグレーションファイルの編集が完了していないのにrails db:migrateを先走って実行してしまった場合など。
パニックにならずに以下のコマンドを実行しましょう。
【コマンド】rails db:rollback
これにより上の画像の「Status」の部分が「up」から「down」に変更され、migrateする前の状態に戻ります。これでマイグレーションファイルを再度編集できるようになります。
※厳密にはマイグレーションファイルは編集しようと思えばいつでも編集できますが、「up」状態のマイグレーションファイルを編集してしまうとエラーの原因になるので必ずrollbackしてから編集し、再度migrateしましょう。
「up」状態のマイグレーションファイルを削除してしまったら?
①削除されたファイルの代わりとなる仮のマイグレーションファイルを生成
rails db:migrate:statusを実行し、削除済みファイルの「Migration ID」を確認したうえで同じIDを持つマイグレーションファイルを作成。
ファイル名: 「(MigrationID).sample.rb」など
②以下のコマンドが実行できるようになるので、実行。
【コマンド】rails db:rollback
③以下のコマンドでマイグレーションの状態を確認。
【コマンド】rails db:migrate:status
①で仮作成したマイグレーションファイルの「Status」が「down」になっていることが確認できる。
この時点で、仮作成したファイルは削除してしまいましょう。
これでテーブルとマイグレーションの状態の整合が取れました!