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