Rails迁移到drop database(仅当它尚未被删除时)

时间:2013-10-22 18:32:37

标签: ruby-on-rails ruby rails-migrations

我正在尝试重新调整之前用于其他内容的表格。所以我正在创建一个迁移来删除表格并重新开始使用新列。但是,我遇到了一个问题,如果我回滚迁移并再次运行它,我会收到错误,因为该表已被删除。我怎么能绕过这个?

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

2 个答案:

答案 0 :(得分: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

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

答案 1 :(得分:0)

force选项是为了在创建之前删除表(如果存在)而构建的。见docs

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