我创建了以下迁移:插入Rails的两个现有的迁移之间的迁移
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
一旦运行耙这显然会引发错误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
当我第一次看到这个错误时,我只是删除了se cond迁移(如在,将其移到我的垃圾箱文件夹中),运行rake db:再次迁移,然后继续。在那之后,我创建了3次迁移并成功运行了它们。
当我推到Heroku时,这证明是有问题的。不知何故,Heroku仍在处理已删除的迁移。我通过运行heroku运行rake db:schema:reload来实现它,但我知道这不是一个长期的解决方案。
我认为我需要做的是将第二次迁移移回到我的db/migrate目录中,并在两者之间插入一个迁移,将votable_id重新命名为:post_id,以便第二次迁移可以正常运行。我也可以运行rake db:rollback,但是由于迁移出现问题以后出现了一些迁移,这可能会变得混乱。
关于如何负责任地解决此问题的任何想法?这只是一个有趣的项目,所以丢弃数据库并不是世界末日,但我想了解如何做到这一点,如果有的话。