这种情况发生在我身上几次,以下只是表名和一些参数的一个例子:
在迁移rails g migration AddOwnerToRestaurant owner:string
期间添加详细信息并运行rake db:migrate
时,我错误地命名了一个表格;
我销毁迁移rails destroy migration AddOwnerToRestaurant owner:string
并运行rake db:rollback
;
然后我使用相同的详细信息rails g migration AddOwnerToRestaurants
和rake db:migrate
正确地重命名表格。
我一直收到错误消息
StandardError: An error has occurred, this and all later migrations canceled:
SQLite3::SQLException: duplicate column name: owner
为什么不使用第一个rails destroy
命令删除所有者列?我无法将新添加内容迁移到表中。
答案 0 :(得分:2)
rollback
不知道您的数据库看起来像什么。它会查看最后一次迁移并撤消change
方法中的任何内容,假设您只调用rails知道如何反转的方法(list)。
当您首先使用rails destroy migration
删除迁移时,回滚无法按照您希望的方式执行此操作。不要删除迁移,而是将其回滚并重写,然后再次迁移。
此外,您在销毁迁移时不需要列信息
答案 1 :(得分:0)
由于您删除了该文件,请执行以下操作:
rake db:migrate:status
它会显示丢失文件的ID。所以你可以重新创建它然后回滚。
rake db:rollback STEP=n
'n'是上次迁移的回滚次数。
不要再破坏它。相反,创建新的迁移可以解除之前的错误。