Help us understand the problem. What is going on with this article?

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

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

nicoryo
1ヶ月前の自分に教えるつもりで、 学んだことをアウトプットしています
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした