db:migrateのやり直し


db:migtateのやり直り方法

マイグレートしたファイルを削除する(やり直しをかける)

terminal
$ rails db:migrate:down VERSION=[time stamp]
$ rmi -rf [time stamp]_***.rb

migrate_***.rbへ追記方法

作成したカラムを修正したい時は、(1)defメソッドをupとdownを用意する。(2)change_columnに追記したいコードを入力する。(3)downの中に、remove_columnを用意して、元々のadd_columnを記述する。

日付_add_username_to_users.rb(修正前)
class AddUsernameToUsers < ActiveRecord::Migration[6.0]
  def change
    add_column :users, :username, :string #ここにnull: false, default: ""を加えたい。
  end
end
日付_add_username_to_users.rb(修正後)
class AddUsernameToUsers < ActiveRecord::Migration[6.0]
  def up
    change_column :users, :username, :string, null: false, default: ""
    add_column :users, :username, :string
  end

  def down
    remove_column :users, :username, :string
  end
end

終わり。

もし、db:migrate:downさせる前にマイグレーションファイルを削除してしまっていた場合

設定等が残ってしまうため、同じタイムスタンプのファイルを作成する必要がある

まずは、マイグレーションの状況を見て、何がup状態か確認する
やらかしている時は、下記のようなNO FILEがいる

terminal
$ rails db:migrate:status

Status   Migration ID    Migration Name
--------------------------------------------------
   up     20200817055815  Devise create users
   up     20200817065100  Add name to users
   up     20200817102227  Create rooms
   up     20200817104106  Create entries
   up     20200818043808  ********** NO FILE **********

こうなっていた場合は、NO FILEのID(20200818043808)を元に、
簡易なマイグレーションファイルを作成する
(変にスペルミスしないように注意!、私は大文字小文字の打ち間違えで、エラー起こした。照り)

terminal
$ vim db/migrate/20200818043808_tmp.rb

class Tmp < ActiveRecord::Migration
    def change
    end
end

念のため、statusでNO FILEがTmpに変わっていることを確認。(割愛)

terminal
$ rails db:migrate:status

 Status   Migration ID    Migration Name
--------------------------------------------------
   up     20200817055815  Devise create users
   up     20200817065100  Add name to users
   up     20200817102227  Create rooms
   up     20200817104106  Create entries
   up     20200818043808  Tmp

確認してできたら、上記の通りdownさせて、削除して終わり!

teminal
$ rails db:migrate:down VERSION=20200818043808
$ rm -rf 20200818043808_tmp.rb

終わり

参考にさせていただいた記事
https://qiita.com/gita/items/2198e2961a9fc7d10bd2

誤った理解をしていればご指摘いただければ幸いです。