在Rails中还原特定的旧迁移,而不还原以后的迁移

时间:2015-01-27 08:03:12

标签: ruby-on-rails ruby-on-rails-4

我开始在Rails应用程序中使用Rolify并创建了一个迁移,以便在15次迁移之前设置其表。我现在决定用我自己的代码替换它,并希望在不触及所有后续迁移的情况下恢复一次迁移。数据库现在正在使用,因此恢复15,删除我不想添加的数据库,然后应用后续的14将破坏数据。

Section 3.11 of the Rails Guide on migrations建议可以通过创建新的迁移来完成此操作,该迁移按名称还原特定的旧迁移:

class FixupExampleMigration < ActiveRecord::Migration
  def change
    revert ExampleMigration

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

我尝试根据我的上下文自定义它,如下所示:

class RolifyDestroyRoles < ActiveRecord::Migration
  def change
    revert RolifyCreateRoles
  end
end

(我原来的Rolify迁移的第一行是class RolifyCreateRoles < ActiveRecord::Migration)。但是,我收到了命名空间错误:

StandardError: An error has occurred, this and all later migrations canceled:

uninitialized constant RolifyDestroyRoles::RolifyCreateRoles/home/slack/rails/tracker/db/migrate/20150127093921_rolify_destroy_roles.rb:3:in `change'

也许在Rails 4中有些变化。有谁知道我应该如何引用RolifyCreateRoles以便Rails可以找到它?

1 个答案:

答案 0 :(得分:2)

在rails中恢复特定迁移:

我们说我们有迁移:

db/migrate/20150127071749_create_users.rb

revert: 
rake db:migrate:down VERSION=20150127071749

setup again:
rake db:migrate:up VERSION=20150127071749

希望有所帮助:)