Railsで特定のテーブルを再作成する方法
Railsでアプリケーションを作って、
そのアプリケーションを運営する中で、
現在のテーブルの項目を調整することは、
実際によくあることだと思います。
そんな中で、
- 既存のカラムを削除する
- 既存のカラムを変更する
- 新規のカラムを追加する
という時に、
既存のテーブルに対して、
変更を加えた際に、
rails db:migrate:reset
などを実行してしまうと、
全てのテーブルがクリアされてしまう。
以下の記事の中のコマンドです。
Railsでdb:migrate:resetがうまく動かなかった時の対応メモ
こちらの対応ではなく、
対象のテーブルだけ、
設定情報を反映させることが必要でした。
毎回、調べるのも面倒になってきたので、
設定内容を簡単にメモしておきます。
Railsのマイグレーションの状況確認
まずは、
Railsのマイグレーションで作成したテーブルの、
作成状況をコマンドで確認します。
rails db:migrate:status
のコマンドを実行すると、
$ rails db:migrate:status
Running via Spring preloader in process 428491
database: sample
Status Migration ID Migration Name
--------------------------------------------------
up 20220101000000 Sample1
up 20220207000000 Sample2
up 20220207010000 Sample3
up 20220207020000 Sample4
up 20220207030000 Sample5
up 20220208000000 Sample6
up 20220222010000 Sample7
up 20220223000000 Sample8
このようにRailsのマイグレーションの状況が表示されます。
こちらを見てわかるように、
- Railsの各種テーブルのステータスが「up」の状態である
ということが言えます。
Railsの特定テーブルのみ、テーブルの再作成を実行
先ほどのテーブルの一覧に対して、
特定テーブルのみ再作成するためには、
- 指定テーブルを「down」ステータスに変更
- 指定テーブルを再度「up」ステータスに変更
という手順で対応します。
先ほど、ステータスの状況を確認した中で、
$ rails db:migrate:status
Running via Spring preloader in process 428491
database: sample
Status Migration ID Migration Name
--------------------------------------------------
up 20220101000000 Sample1
↑ ↑
これが対象のID
この「Migration ID」の表示部分が、
対象のIDになるので、
以下のそれぞれのコマンドで、
ステータスを「down」「up」に変更します。
ステータスを「down」に変更(Migration ID指定)
rails db:migrate:down VERSION=ここにMigrationIDを指定
ステータスを「up」に変更(Migration ID指定)
rails db:migrate:up VERSION=ここにMigrationIDを指定
実際に試してみる
先ほどのマイグレーションの状況確認で、
$ rails db:migrate:status
Running via Spring preloader in process 428491
database: sample
Status Migration ID Migration Name
--------------------------------------------------
up 20220101000000 Sample1
↑ ↑
これが対象のID
こちらのテーブルを対象にして、
テーブルの再作成を行なってみます。
Migration IDが、
20220101000000
というIDになるので、
ステータスを「down」に変更(Migration ID指定)
rails db:migrate:down VERSION=20220101000000
こちらを実行すると、
$ rails db:migrate:down VERSION=20220101000000
Running via Spring preloader in process 428540
== 20220101000000 Sample1: reverting ====================================
-- drop_table("sample1", {:id=>:integer, :options=>"ENGINE=InnoDB DEFAULT
CHARSET=utf8mb4", :force=>:cascade})
-> 0.0844s
== 20220101000000 Sample1: reverted (0.0889s) ===========================
このように処理が完了しました。
この状態で、
ステータスを再度、確認してみます。
$ rails db:migrate:status
Running via Spring preloader in process 428491
database: sample
Status Migration ID Migration Name
--------------------------------------------------
down 20220101000000 Sample1
↑ ↑
ステータスが変更された
うまく、ステータスが「down」になっています。
次に、ステータスを元に戻します。
ステータスを「up」に変更(Migration ID指定)
rails db:migrate:up VERSION=20220101000000
こちらを実行すると、
$ rails db:migrate:up VERSION=20220228000000
Running via Spring preloader in process 428561
== 20220228000000 Sample1: migrating ====================================
-- create_table("sample1", {:id=>:integer,
:options=>"ENGINE=InnoDB DEFAULT CHARSET=utf8mb4", :force=>:cascade})
-> 0.1593s
== 20220228000000 Sample1: migrated (0.1596s) ===========================
このように、
処理が完了しました。
最後にステータスが、
「up」の状態に戻ったことを確認します。
$ rails db:migrate:status
Running via Spring preloader in process 428491
database: sample
Status Migration ID Migration Name
--------------------------------------------------
up 20220101000000 Sample1
↑ ↑
ステータスが変更された
ステータスが「up」になったので、
変更対象のテーブルの定義を確認したら、
問題なくテーブル定義も変わっており、
対象テーブルのみ再作成が完了しました。
スキルを使って、就職/転職/副業する時のサイト
プログラミングのスキルなどを、自分なりに高めた上で、
自分のスキルをアピールして就職や転職を行い、年収をあげるか、
副業という形で、年収にプラスアルファの稼ぎを増やすことはできます。
まずはできる範囲で取り組むことで、
少しずつ、経験値も増え、自分のスキルが収入につながるのでおすすめです。