我创建了以下迁移:
class FixVoteColumnName < ActiveRecord::Migration
def change
rename_column :votes, :post_id, :votable_id
add_column :votes, :votable_type, :string
end
end
然后错误地创建了这个迁移,再次重命名该列:
class ChangeVoteTableColumns < ActiveRecord::Migration
def change
rename_column :votes, :post_id, :votable_id
end
end
这显然会在运行 rake db:migrate 时引发错误:
== FixVoteColumnName: migrating ==============================================
-- rename_column(:votes, :post_id, :votable_id)
rake aborted!
An error has occurred, this and all later migrations canceled:
Missing column votes.post_id
当我第一次看到这个错误时,我只是删除了第二次迁移(例如,将其移至我的垃圾文件夹),再次运行 rake db:migrate,然后继续。在那之后,我创建了 3 个迁移并成功运行它们。
当我推到 Heroku 时,这被证明是有问题的。不知何故,Heroku 仍在处理已删除的迁移。我通过运行 heroku run rake db:schema:reload 让它工作,但我知道这不是一个长期的解决方案。
我认为我需要做的是将第二次迁移移回我的 db/migrate 目录,并在将 :votable_id 重命名为 :post_id 的两者之间插入迁移,以便第二次迁移可以正常运行。我也可以运行 rake db:rollback,但是自从有问题的迁移以来已经进行了一些迁移,这可能会变得一团糟。
关于如何负责任地解决这个问题的任何想法?这只是一个有趣的项目,因此删除数据库并不是世界末日,但我想学习如何以正确的方式进行操作,如果有的话。