0

我正在尝试重新利用以前用于其他用途的表格。所以我正在创建一个迁移以删除表并从新列开始。但是,我遇到了一个问题,如果我回滚迁移并再次运行它,我会收到错误,因为表已经被删除。我怎样才能解决这个问题?

class CreateNewTeams < ActiveRecord::Migration
  def self.up
    drop_table :teams
    create_table :teams do |f|
      # ...
    end
  end

  def self.down
    drop_table :teams
  end
end
4

2 回答 2

0

force选项是为在创建之前删除表而构建的(如果它存在)。查看文档

class CreateNewTeams < ActiveRecord::Migration
  def self.up
    create_table :teams, :force => true do |f|
      # new columns
    end
  end

  def self.down
    create_table :teams, :force => true do |f|
      # old columns
    end 
  end
end
于 2013-10-22T19:07:44.400 回答
0

您的 down 应该使数据库处于迁移运行之前的状态。所以在你的情况下,

class CreateNewTeams < ActiveRecord::Migration
  def self.up
    drop_table :teams
    create_table :teams do |f|
      # new purpose
    end
  end

  def self.down
    drop_table :teams
    create_table :teams do |f|
      # old purpose
    end
  end
end

如果您需要更改的只是重命名某些列,请在不删除表的情况下执行此操作。如果您在一个实时且广泛使用的应用程序上执行此操作,则部署此更改将导致停机。请记住这一点

于 2013-10-22T18:35:34.840 回答