Railsで特定のテーブルを再作成する方法

Railsでアプリケーションを作って、

そのアプリケーションを運営する中で、

現在のテーブルの項目を調整することは、

実際によくあることだと思います。

そんな中で、

  • 既存のカラムを削除する
  • 既存のカラムを変更する
  • 新規のカラムを追加する

という時に、

既存のテーブルに対して、

変更を加えた際に、

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」になったので、

変更対象のテーブルの定義を確認したら、

問題なくテーブル定義も変わっており、

対象テーブルのみ再作成が完了しました。

スキルを使って、就職/転職/副業する時のサイト

プログラミングのスキルなどを、自分なりに高めた上で、

自分のスキルをアピールして就職や転職を行い、年収をあげるか、

副業という形で、年収にプラスアルファの稼ぎを増やすことはできます。

まずはできる範囲で取り組むことで、

少しずつ、経験値も増え、自分のスキルが収入につながるのでおすすめです。

おすすめ書籍

広告

おすすめ記事