ruby迁移回滚但在再次运行迁移时出错

这是我在RoR应用程序中运行迁移时遇到的错误:

PG::Error: ERROR: column "bulk_bill" of relation "questionnaires" already exists 

一点背景:我回滚了一个迁移,以便我可以更改列的默认设置。 一旦我再次运行迁移,我就得到了上面的错误。

我可以在开发中的postgresql表中看到该列确实存在。 我在表和bulk_bill列中有一个数据,它的默认设置为false。

我需要采取哪些建议步骤才能成功运行迁移。 我是ruby的初学者,发现ruby文档仍然有点难以理解。

  def up add_column :questionnaires, :bulk_bill, :boolean, :default => false end def down remove_column :pnp_questionnaires, :bulk_bill end 

在你的up方法中,你在questionaries表上创建了列,在你的down方法中你将它从pnp_questionaries中删除。 如果表不存在,删除列不会引发除外,因此您遇到了问题。

最简单的解决方案

  1. add_column
  2. 运行迁移(是的,运行空迁移)。
  3. 修复你的down方法以删除questionaries表。
  4. 回滚迁移。
  5. 取消注释你的up方法。

更新:

我的不好之处3是’从问题中删除专栏’,而不是’删除表’。

您需要重新运行创建表的迁移(希望您在此期间不会改变它)。 转到给定的迁移,注释掉方法体,然后运行rake db:migrate:redo VERSION=xxxxxxx其中xxxxxx是此迁移文件名中的时间戳。