2012-01-23 21 views
23

我有我认为是一个非常简单的迁移。出于某种原因,当我尝试使用db:rollbackdb:migrate:redo时,出现IrreversibleMigration错误。这个迁移为什么不可逆转? (change_table,rename,text)

迁移运行平稳,但我宁愿保持可逆。我无法弄清楚为什么它不是书面的。有任何想法吗?

这里的迁移:

class AddWhyHypAndWhyHypeToStatements < ActiveRecord::Migration 
    def change 
    change_table :statements do |t| 
     t.rename :description, :why_hypocritical 
     t.text :why_hypothetical 
    end 
    end 
end 

如果它的事项, “说明” 栏中的文本列。我正在使用Rails 3.1/Ruby 1.9.2/PostgreSQL。谢谢你的帮助。

+0

你知道是否是引起异常的't.rename'或't.text'吗? –

+0

我不知道。我用'--trace'试过了我的回滚,但是输出并没有引用迁移本身的任何内容。 –

+0

尝试将迁移分解为两部分,并查看哪一个会在回滚时引发异常。 –

回答

21

看起来像Rails有麻烦恢复change_table方法。试着做这种方式来代替:

class AddWhyHypAndWhyHypeToStatements < ActiveRecord::Migration 
    def change 
    rename_column :statements, :description, :why_hypocritical 
    add_column :statements, :why_hypothetical, :text 
    end 
end 

你可以看到,可以在docsRails Guides反转命令的列表。

+1

谢谢,这似乎是正确的。我之前阅读过指南和文档,并认为由于我的'change_table'只包含'rename'和'add_column',所以它可以被Rails自动转换。但仔细阅读指南,我意识到这是我的一个假设,不一定是正确的(即,这些命令只能以long-form形式可逆,而不能在change_table中嵌套)。我做了这个改变,它可以工作。再次感谢。 –