はじめに
テーブルを作成した後にいざ作業に取り組もうと思っていたら、カラム名に誤字脱字があった、後から何か追加しなければいけなくなった、なんていう時があるかと思います。
私自身も学習を始めた初期の頃は、よく目の当たりにし、マイグレーションファイルは厄介だし触りたくないと絶望した記憶があります。
コマンドを忘れてしまいがちなので、そんな時の対処法を備忘録として記しておきます。
開発環境
ruby 2.6.3
Rails 5.2.4.4
解決方法①
####メリット
● 追加や削除を行っても既存のファイルのみで変更が行えるので、ファイルが無駄に増えない。
####デメリット
● いつ何に追加や変更を加えたのかが分からない。
=チーム開発など自分以外の人と共同で作業する場合には、向かないとも言える。
①現在のテーブルの状態を確認します。
ここでupと表示が出ているものに関しては、rails db:migrateコマンドにより既にマイグレーションが実行されたものになります。
$ rails db:migrate:status
up 20210209151659 Create users
up 20210217102543 Create books
up 20210218081902 Create comments
②upと表示されているテーブルに変更を加えたい場合は、一度downにする必要があります。
(down = マイグレーションを実行する前の状態にする)
# 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
③最初に作成していたマイグレーションファイルに変更を加える。
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
④再度マイグレーションを実行する
$ rails db:migrate
⑤完成!
解決方法②
####メリット
● いつ何に追加や変更を加えたのかが分かりやすい。
=チーム開発など自分以外の人と共同で作業する場合には、周りの人にも分かりやすい。
####デメリット
● 追加や変更を加える回数が増える分だけ、マイグレーションファイルが増えてしまう。
①用途に合わせて以下のどちらかのコマンドを実行する。 ● rails g migration Addカラム名Toテーブル名 カラム名:型名 ● rails g migration AddColumnToテーブル名
# 追加するカラムが一つの場合
$ rails g migration AddTitleToBook title:string
# 追加するカラムが複数の場合
$ rails g migration AddColumnToBooks
②マイグレーションファイルが作成されたことを確認し、オプションなどを加える場合は記述をする。
class AddTitleToBook < ActiveRecord::Migration[5.2]
def change
add_column :book, :title, :string
end
end
③再度マイグレーションを実行する
$ rails db:migrate
④完成!
やり方は1つではありませんが、ご自分に適した方法を選んでいただければ良いかと思います。
焦らず落ち着いて取り組めば大丈夫です!
終わり
今回は以上になります。
私自身もプログラミング初心者ですが、同じ様な立場の方に少しでも参考になれば幸いです。
また、もし内容に誤りなどがございましたら、ご指摘いただけますと幸いです。