Skip to content

Instantly share code, notes, and snippets.

@seak0503
Last active May 16, 2018 06:21
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save seak0503/84bfa6b37a0a6961c334 to your computer and use it in GitHub Desktop.
Save seak0503/84bfa6b37a0a6961c334 to your computer and use it in GitHub Desktop.
Railsのマイグレーションの変更を元に戻す方法

Railsのマイグレーションの変更を元に戻す方法

現在の状況を確認する

まずはどこまでmigrateが実行されているかを確認しましょう。

bin/rake db:version

こんな感じで出てきます。

20171112122350まで実行されていますね。

bin/rake db:version

Current version: 20171112122350

ロールバック

次に戻したいところまでロールバックします。

一つ前まで戻す

bin/rake db:rollback

任意のファイルまで戻す

bin/rake db:rollback STEP=○

現在地を含めた○個前までなかったことにしてくれます。

(つまり○+1個前のファイルまで実行された状態)

migrateされていないファイルを確認

念のためどのファイルが実行されていないか確認します。

bin/rake db:abort_if_pending_migrations

You have 1 pending migrations:
  20171112131249 CreateUsers

20171112131249のUserテーブルが作られていないようです。

ファイルを修正

class CreateUsers < ActiveRecord::Migration[5.1]
  def change
    create_table :users do |t|
      t.references :comment, index: true, foreign_key: true    # null: falseを削除
      t.string :name
      t.string :email
      t.timestamps
    end
  end
end

今回はCommentテーブルにレコードが何も入っていない状態で

NOT NULLにしてしまったため失敗したので、

null: falseを削除します。

migrate

修正が完了したらマイグレートを実行します。

bin/rake db:migrate
== 20171112131249 CreateUsers: migrating ===============================
-- create_table(:users)
   -> 0.0026s
== 20171112131249 CreateUsers: migrated (0.0027s) ========================

これで無事修正完了です。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment