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

时间:2014-03-05 20:35:25

标签: ruby-on-rails ruby postgresql

这是我在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

1 个答案:

答案 0 :(得分:2)

up方法中,您要在questionaries表格中创建列,并在您的向下方法中将其从pnp_questionaries中删除。如果表不存在,删除列不会引发除外,因此您有问题。

最简单的解决方案:

  1. 从上面评论add_column
  2. 运行迁移(是的,运行空迁移)。
  3. 修复您的down方法以删除questionaries表。
  4. 回滚迁移。
  5. 取消注释up方法。
  6. 更新:

    我的不好之处3是'从问题中删除列',而不是'删除表'。

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