LoginSignup
4
1

More than 1 year has passed since last update.

Rails カラム追加とロールバック

Posted at

はじめに

業務の中で既存のテーブルに対して、カラムの追加が必要なタスクがあったので色々調べて得た情報をまとめてみました。

手順1 マイグレーションファイルの作成

テーブのを作成や編集を行うにはマイグレーションファイルを作成する必要があります。

マイグレーション作成コマンドは以下になります。

補足) 業務のアプリケーションはdockerのコンテナ上で動作していたのでコンテナ上でrailsコマンドを実行する必要がありました。

$ rails generate migration Addカラム名Toテーブル名 カラム名:データ型

実際のコマンドだと...

rails generate migration AddIntroductionToProfile

みたいな感じになるかなと思います。

上記コマンドを実行するとdb/migreteの配下に20221222_add_introdunction_to_profile.rbみたいなファイルが生成されているはずです。

手順2 マイグレーションファイルの中身を確認

20221222_add_introdunction_to_profile.rb
class AddIntroductionToProfile < ActiveRecord::Migration
  def change
    add_column :profile, :introduction, :string
  end
end

手順3 マイグレーションを実行

$ rails db:migrate

手順4 DBを確認

$ show columns from profile;

+--------------+--------------+------+-----+---------+----------------+
| Field        | Type         | Null | Key | Default | Extra          |
+--------------+--------------+------+-----+---------+----------------+
| id           | bigint(20)   | NO   | PRI | NULL    | auto_increment |
| user_id      | bigint(20)   | YES  | MUL | NULL    |                |
| created_at   | datetime     | NO   |     | NULL    |                |
| updated_at   | datetime     | NO   |     | NULL    |                |
| introduction | varchar(255) | YES  |     | NULL    |                |
+--------------+--------------+------+-----+---------+----------------+

カラムが追加されている、、、!

これにてカラム追加自体は完了なのですが、その後先輩からレビューいただいた際にcreated_atupdated_atの後ろに来るのは如何なのものかと指摘いただきまして、ロールバックをし再度カラムを追加することになりました。

現在のマイグレーションのバージョンを確認

$ rails db:version
Current version: 20221223214835

先ほど実行したものが出てきます。

ロールバックを実行

以下のコマンドでマイグレーションのバージョンを1個戻すことができます。

$ rails db:rollback

これで先ほど生成した20221222_add_introdunction_to_profile.rbが反映されていない状態に戻りました。

マイグレーションファイルを修正

今回はカラムの順番を変える必要があるので

20221222_add_introdunction_to_profile.rb
class AddIntroductionToProfile < ActiveRecord::Migration
  def change
    add_column :profile, :introduction, :string, after: :user_id
  end
end

今回の場合update_atよりも順番を上にしたかったのでafter: :user_idを追加しました。

その後マイグレーションを実行すると

$ show columns from profile;

+--------------+--------------+------+-----+---------+----------------+
| Field        | Type         | Null | Key | Default | Extra          |
+--------------+--------------+------+-----+---------+----------------+
| id           | bigint(20)   | NO   | PRI | NULL    | auto_increment |
| user_id      | bigint(20)   | YES  | MUL | NULL    |                |
| introduction | varchar(255) | YES  |     | NULL    |                |
| created_at   | datetime     | NO   |     | NULL    |                |
| updated_at   | datetime     | NO   |     | NULL    |                |
+--------------+--------------+------+-----+---------+----------------+

ちゃんと順番が変わりました!

#終わりに
拙い文章ですが読んでくださった方、ありがとうございました。どなたかのお役に立てれば幸いです。
そして先輩エンジニアの方々、間違い等ありましたら優しく指摘くださると嬉しいです。
今後も学んだこと気づいたことを挙げていければと思います!!

参考

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1