2012-01-23 2 views
23

私はかなり単純な移行だと思います。何らかの理由で、db:rollbackまたはdb: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

移行を2つの部分に分割し、どの部分がロールバック時に例外を発生させるかを確認してください。 –

答えて

21

ルックスのように見えるのは、change_tableの方法を元に戻すトラブルです。代わりに、そのようにやってみてください。

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

あなたはdocsまたはRails Guidesに反転させることができるコマンドの一覧を見ることができます。

+1

ありがとう、これは正しいようです。私は前にガイドとドキュメントを読んで、 'change_table'には' rename'と 'add_column'しか含まれていなかったので、Railsによって自動可逆的になると思っていました。しかし、ガイドを少しずつ読んだところ、これは私の前提であり、必ずしも正しいものではないことに気付きました(つまり、これらのコマンドは 'change_table'ネストではなく、長い形式でのみリバーシブルです)。私はこの変更を行い、それは動作します。再度、感謝します。 –

関連する問題