はじめに
Railsでmigrationファイルを作成した後に、必要ないカラムがあって削除したいなーと思ったのでDB反映前/反映後の削除方法を調べてまとめました。
- DB反映前のmigrationファイルの削除
- DB反映後のmigrationファイルの削除(1つ前)
- DB反映後のmigrationファイルの削除(複数前)
環境
Rails 5.2.1
DB反映前のmigrationファイルの削除
⇒migrationファイルを削除するだけ
例えば、下記のようなusersテーブルがあり、DB反映前のmigrationファイルを削除したい場合
create_table "users", force: :cascade do |t|
t.string "name"
t.integer "age"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
(下はコマンドプロンプトでrails db:migrate:statusを実行した結果)
dowmはmigrationファイルの内容がDBに反映されていないという意味
Status Migration ID Migration Name
--------------------------------------------------
up 20181014050402 Create users
down 20181019135434 Add email to users 👈DBに反映されていない
↓ downのmigrationファイルを削除
Status Migration ID Migration Name
--------------------------------------------------
up 20181014050402 Create users
DB反映後のmigrationファイルの削除(1つ前)
⇒rails db:rollbackでロールバックして、migrationファイルを削除
create_table "users", force: :cascade do |t|
t.string "name"
t.integer "age"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.string "email" 👈削除したい
end
Status Migration ID Migration Name
--------------------------------------------------
up 20181014050402 Create users
up 20181019135434 Add email to users 👈削除したいが、DBに反映済
↓ rails db:rollback (1つ前の状態に戻す)
Status Migration ID Migration Name
--------------------------------------------------
up 20181014050402 Create users
down 20181019135434 Add email to users 👈Statusがdownになる
↓ downのmigrationファイルを削除
Status Migration ID Migration Name
--------------------------------------------------
up 20181014050402 Create users
emailのカラムが削除されています
create_table "users", force: :cascade do |t|
t.string "name"
t.integer "age"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
DB反映後のmigrationファイルの削除(複数前)
⇒ID指定でdownして、migrationファイルを削除
create_table "users", force: :cascade do |t|
t.string "name"
t.integer "age"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.string "email" 👈削除したい
t.string "address"
t.string "job"
end
Status Migration ID Migration Name
--------------------------------------------------
up 20181014050402 Create users
up 20181019135434 Add email to users 👈削除したい
up 20181019135637 Add address to users
up 20181019135931 Add job to users
↓ rails db:migrate:down VERSION=20181019135434
(VERSIONに「Migration ID」を指定)
Status Migration ID Migration Name
--------------------------------------------------
up 20181014050402 Create users
down 20181019135434 Add email to users 👈Statusがdownになる
up 20181019135637 Add address to users
up 20181019135931 Add job to users
↓ downのmigrationファイルを削除
Status Migration ID Migration Name
--------------------------------------------------
up 20181014050402 Create users
up 20181019135637 Add address to users
up 20181019135931 Add job to users
emailのカラムが削除されています
create_table "users", force: :cascade do |t|
t.string "name"
t.integer "age"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.string "address"
t.string "job"
end
まとめ
-
DB反映前のmigrationファイルの削除
⇒migrationファイルを削除 -
DB反映後のmigrationファイルの削除(1つ前)
⇒ロールバックしてmigrationファイルを削除 -
DB反映後のmigrationファイルの削除(複数前)
⇒ID指定でdownして、migrationファイルを削除
練習用のモデルを作成して自分で操作すると身に付きやすかったです。