30

我刚刚安装了设计,所以除了一个用户(我)之外,表格上没有任何数据。

我正在重新做数据库,所以我把它全部删除了。我确实rails g scaffold生成了 6 个新模型和控制器rake db:migrate

在我的/db/migrate目录中,我有带有文件名的设计文件20130603211907_devise_create_users.rb

这是问题:如果我这样做rake db:migrate:down VERSION=20130603211907,它将删除所有新的迁移。

如何在不删除所有较新迁移的情况下再次运行迁移?

4

5 回答 5

87

它将运行 down 然后 up 步骤(此命令可以删除您的表!):

rake db:migrate:redo VERSION=xxxxxxx

为了防止您的表格被删除,您可以结合临时注释掉该down步骤来执行此操作。

于 2013-06-07T09:52:40.723 回答
11

感谢大家的帮助。这对我有用:

警告:这些命令将删除数据库中的所有数据!

rake db:drop
rake db:create
rake db:migrate
于 2013-06-07T10:04:14.480 回答
8

如果您在本地开发并且从模型中删除所有数据并没有什么坏处,您可以简单地使用您的数据库,drop然后从头开始:createmigrate

清除或重新创建 Ruby on Rails 数据库

于 2013-06-07T09:52:40.970 回答
8
rake db:migrate:up VERSION=20090408054532

这会将所有文件迁移到 VERSION=20090408054532

checkout运行单个迁移文件

于 2013-06-07T09:54:59.313 回答
6

您可以调用rake db:migrate:redo VERSION=20130603211907which 将重新运行指定的版本。

此外,如果您的迁移只应在迁移链上运行(例如数据转换、复制等),您可以指定一个

def up 
  do_something
end

和def down(往下走)、def change(双向)方法分别。

要暂时禁用迁移,例如,只需将方法重命名为,def updef up_处理迁移链时它将被忽略。

于 2018-02-07T15:15:43.910 回答