942

次の移行ファイルがありますdb\migrate\20100905201547_create_blocks.rb

その移行ファイルを具体的にロールバックするにはどうすればよいですか?

4

15 に答える 15

1593
rake db:rollback STEP=1

ロールバックする移行が最後に適用された移行である場合、これを行う方法です。戻したい移行の数を 1 に置き換えることができます。

例えば:

rake db:rollback STEP=5

また、後で行われたすべての移行 (4、3、2、および 1) もロールバックします。

すべての移行をターゲット移行に (およびそれを含めて) ロールバックするには、次を使用します: (この修正されたコマンドは、元の投稿のエラーを指摘するすべてのコメントの後に追加されました)

rake db:migrate VERSION=20100905201547

1 つの特定の移行のみをロールバックするには (順不同)、次を使用します。

rake db:migrate:down VERSION=20100905201547

これは、介在する移行をロールバックしないことに注意してください。リストされている移行のみです。それが意図したものでない場合は、安全に実行できますrake db:migrate。以前にロールバックされていない他のものはスキップして、その 1 つだけが再実行されます。

また、単一の移行を順不同で移行したい場合は、その逆もありますdb:migrate:up

rake db:migrate:up VERSION=20100905201547
于 2010-09-05T21:10:53.987 に答える
912
rake db:migrate:down VERSION=20100905201547

特定のファイルをロールバックします。


すべての移行のバージョンを確認するには、次のコマンドを使用できます。

rake db:migrate:status

または、単に移行のファイル名のプレフィックスが、ロールバックする必要があるバージョンです。


移行に関する Ruby on Rails ガイドのエントリを参照してください。

于 2011-07-09T14:36:48.203 に答える
68

最後の移行をロールバックするには、次のことができます。

rake db:rollback

特定のバージョンの移行をロールバックする場合は、次のようにする必要があります。

rake db:migrate:down VERSION=YOUR_MIGRATION_VERSION

たとえば、バージョンが 20141201122027 の場合、次のようにします。

rake db:migrate:down VERSION=20141201122027

その特定の移行をロールバックします。

于 2014-12-02T07:26:08.337 に答える
38

さまざまなオプションを使用して、移行をロールバックできrake db:rollbackます。構文は、要件によって異なります。

最後の移行だけをロールバックする場合は、次のいずれかを使用できます

rake db:rollback

また

rake db:rollback STEP=1

一度に複数の移行をロールバックする場合は、引数を渡すだけです。

rake db:rollback STEP=n

ここでn、最新の移行から数えて、ロールバックする移行の数です。

特定の移行にロールバックする場合は、移行のバージョンを次のように渡す必要があります。

rake db:migrate:down VERSION=xxxxx

ここで、xxxxx は移行のバージョン番号です。

于 2014-03-24T07:54:45.550 に答える
29

rake db:migrate:down VERSION=your_migrations's_version_number_here

バージョンは、移行のファイル名の数値プレフィックスです

バージョンの確認方法:

移行ファイルはrails_root/db/migrateディレクトリに保存されます。ロールバックする適切なファイルを見つけて、プレフィックス番号をコピーします。

例えば

ファイル名:20140208031131_create_roles.rb バージョンは20140208031131

于 2014-04-22T06:58:15.557 に答える
19

最後の移行をロールバックしています:

# rails < 5.0
rake db:rollback

# rails >= 5.0
rake db:rollback
# or
rails db:rollback

n最後の数回の移行をロールバックしています

# rails < 5.0
rake db:rollback STEP=2

# rails >= 5.0
rake db:rollback STEP=2
# or
rails db:rollback STEP=2

特定の移行のロールバック

# rails < 5.0
rake db:migrate:down VERSION=20100905201547

# rails >= 5.0
rake db:migrate:down VERSION=20100905201547
# or
rails db:migrate:down VERSION=20100905201547
于 2016-09-20T12:16:07.553 に答える
14

最後の移行をロールバックするには、次のことができます。

rake db:rollback

特定のバージョンの移行をロールバックする場合は、次のようにする必要があります。

rake db:migrate:down VERSION=YOUR_MIGRATION_VERSION

ロールバックする移行ファイルが という名前だった場合、db/migrate/20141201122027_create_some_table.rbその移行の VERSION は で20141201122027、これはその移行が作成されたときのタイムスタンプであり、その移行をロールバックするコマンドは次のようになります。

rake db:migrate:down VERSION=20141201122027
于 2015-01-06T13:01:56.660 に答える
6

可逆移行であり、最後に実行された移行である場合は、 を実行しますrake db:rollback。そして、いつでもバージョンを使用できます。例えば

移行ファイルは 20140716084539_create_customer_stats.rb なので、ロールバック コマンドは次のようになります。 rake db:migrate:down VERSION=20140716084539

于 2014-07-28T10:36:35.320 に答える
4

移行は、コマンドを使用してデータベースの状態を変更します

$ bundle exec rake db:migrate

を使用して、単一の移行ステップを元に戻すことができます

  $ bundle exec rake db:rollback

最初に戻るには、次を使用できます。

  $ bundle exec rake db:migrate VERSION=0

ご想像のとおり、0 を他の番号に置き換えると、そのバージョン番号に移行されます。バージョン番号は、移行を順番にリストしたものです。

于 2016-05-06T20:11:13.997 に答える
4

Railsガイドより

以前の移行を元に戻す

revert次のメソッドを使用して、Active Record の移行をロールバックする機能を使用できます。

require_relative '20100905201547_create_blocks'

class FixupCreateBlock < ActiveRecord::Migration
  def change
    revert CreateBlock

    create_table(:apples) do |t|
      t.string :variety
    end
  end
end

このrevertメソッドは、元に戻す命令のブロックも受け入れます。これは、以前の移行の選択した部分を元に戻すのに役立ちます。たとえば、CreateBlock がコミットされ、後で CHECK 制約の代わりに Active Record 検証を使用して郵便番号を検証することが最善であると判断されたとします。

    class DontUseConstraintForZipcodeValidationMigration < ActiveRecord::Migration
      def change
        revert do
          # copy-pasted code from CreateBlock
          reversible do |dir|
            dir.up do
              # add a CHECK constraint
              execute <<-SQL
                ALTER TABLE distributors
                  ADD CONSTRAINT zipchk
                    CHECK (char_length(zipcode) = 5);
              SQL
            end
            dir.down do
              execute <<-SQL
                ALTER TABLE distributors
                  DROP CONSTRAINT zipchk
              SQL
            end
          end

          # The rest of the migration was ok
        end
      end
    end

revert を使用せずに同じ移行を記述することもできますが、これにはさらにいくつかの手順が必要になります。つまり、create_table と reversible の順序を逆にし、create_table を drop_table に置き換え、最後に up を down に置き換え、その逆です。これはすべて revert によって処理されます。

于 2015-06-29T08:05:30.383 に答える
2

Rails 5では、かなり簡単です rake db:migrate:status または rails db:migrate:status

両方を同じ方法で処理するように変更されました次に、ロールバックするバージョンを選択してから rake db:migrate VERSION=2013424230423 を実行します

VERSION がすべて大文字であることを確認してください

移行のいずれかのステップで問題が発生したり、途中で立ち往生したりした場合は、移行ファイルに移動して、既に移行された行をコメントアウトしてください。

それが役立つことを願っています

于 2016-07-20T17:07:23.607 に答える