2
0

More than 3 years have passed since last update.

【Rails】 初心者向け!テーブルにカラムを追加・変更をするとき(2パターン)

Last updated at Posted at 2021-02-18

はじめに

テーブルを作成した後にいざ作業に取り組もうと思っていたら、カラム名に誤字脱字があった、後から何か追加しなければいけなくなった、なんていう時があるかと思います。
私自身も学習を始めた初期の頃は、よく目の当たりにし、マイグレーションファイルは厄介だし触りたくないと絶望した記憶があります。
コマンドを忘れてしまいがちなので、そんな時の対処法を備忘録として記しておきます。

開発環境

ruby 2.6.3
Rails 5.2.4.4

解決方法①

メリット

● 追加や削除を行っても既存のファイルのみで変更が行えるので、ファイルが無駄に増えない。

デメリット

● いつ何に追加や変更を加えたのかが分からない。
=チーム開発など自分以外の人と共同で作業する場合には、向かないとも言える。

①現在のテーブルの状態を確認します。
ここでupと表示が出ているものに関しては、rails db:migrateコマンドにより既にマイグレーションが実行されたものになります。

terminal.
$ rails db:migrate:status
   up     20210209151659  Create users
   up     20210217102543  Create books
   up     20210218081902  Create comments

②upと表示されているテーブルに変更を加えたい場合は、一度downにする必要があります。
(down = マイグレーションを実行する前の状態にする)

terminal.
# VERSION=以降に作成日時の文字列を加えることで、ファイルの指定が可能
$ rails db:migrate:down VERSION=20210217102543
== 20210217102543 CreateBooks: reverting ================================
-- drop_table(:books)
   -> 0.0029s
== 20210217102543 CreateBooks: reverted (0.0091s) =======================

# 再度テーブルの状態を確認すると、downに変わっています
$ rails db:migrate:status
   up     20210209151659  Create users
   down   20210217102543  Create books
   up     20210218081902  Create comments

③最初に作成していたマイグレーションファイルに変更を加える。

20210217102543_create_books.rb
class CreateBooks < ActiveRecord::Migration[5.2]
  def change
    create_table :books do |t|
      t.integer :user_id
      t.string :title #追加
      t.string :body

      t.timestamps
    end
  end
end

④再度マイグレーションを実行する

terminal.
$ rails db:migrate

⑤完成!

解決方法②

メリット

● いつ何に追加や変更を加えたのかが分かりやすい。
=チーム開発など自分以外の人と共同で作業する場合には、周りの人にも分かりやすい。

デメリット

● 追加や変更を加える回数が増える分だけ、マイグレーションファイルが増えてしまう。



①用途に合わせて以下のどちらかのコマンドを実行する。
● rails g migration Addカラム名Toテーブル名 カラム名:型名
● rails g migration AddColumnToテーブル名

terminal.
# 追加するカラムが一つの場合
$ rails g migration AddTitleToBook title:string

# 追加するカラムが複数の場合
$ rails g migration AddColumnToBooks

②マイグレーションファイルが作成されたことを確認し、オプションなどを加える場合は記述をする。

20210217104040_add_title_to_books.rb
class AddTitleToBook < ActiveRecord::Migration[5.2]
  def change
    add_column :book, :title, :string
  end
end

③再度マイグレーションを実行する

terminal.
$ rails db:migrate

④完成!

やり方は1つではありませんが、ご自分に適した方法を選んでいただければ良いかと思います。
焦らず落ち着いて取り組めば大丈夫です!

終わり

今回は以上になります。
私自身もプログラミング初心者ですが、同じ様な立場の方に少しでも参考になれば幸いです。
また、もし内容に誤りなどがございましたら、ご指摘いただけますと幸いです。

2
0
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
2
0