错误命名的迁移 - rake db:migrate被拒绝

时间:2014-07-25 19:42:51

标签: mysql ruby-on-rails ruby database-migration

这种情况发生在我身上几次,以下只是表名和一些参数的一个例子:

在迁移rails g migration AddOwnerToRestaurant owner:string期间添加详细信息并运行rake db:migrate时,我错误地命名了一个表格;

我销毁迁移rails destroy migration AddOwnerToRestaurant owner:string并运行rake db:rollback;

然后我使用相同的详细信息rails g migration AddOwnerToRestaurantsrake db:migrate正确地重命名表格。

我一直收到错误消息

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

SQLite3::SQLException: duplicate column name: owner

为什么不使用第一个rails destroy命令删除所有者列?我无法将新添加内容迁移到表中。

2 个答案:

答案 0 :(得分:2)

rollback不知道您的数据库看起来像什么。它会查看最后一次迁移并撤消change方法中的任何内容,假设您只调用rails知道如何反转的方法(list)。

当您首先使用rails destroy migration删除迁移时,回滚无法按照您希望的方式执行此操作。不要删除迁移,而是将其回滚并重写,然后再次迁移。

此外,您在销毁迁移时不需要列信息

答案 1 :(得分:0)

由于您删除了该文件,请执行以下操作:

rake db:migrate:status

它会显示丢失文件的ID。所以你可以重新创建它然后回滚。

rake db:rollback STEP=n

'n'是上次迁移的回滚次数。

不要再破坏它。相反,创建新的迁移可以解除之前的错误。