2012-01-23 20 views
23

Oldukça basit bir geçiş yaptığımı düşünüyorum. Nedense db:rollback veya db:migrate:redo'u denediğimde bir IrreversibleMigration hatası alıyorum.Bu geçiş neden geri döndürülemez? (change_table, yeniden adlandır, metin)

Taşıma sorunsuz bir şekilde çalışıyor, ancak bunu tersine çevirmeyi tercih ediyorum. Yazılı olarak neden olmadığını anlayamıyorum. Herhangi bir fikir?

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

Bu konularda, "açıklama" sütununda bir metin sütundur:

İşte göç var. Rails 3.1/Ruby 1.9.2/PostgreSQL kullanıyorum. Herhangi bir yardım için teşekkürler.

+0

İstisna neden olan 't.rename' veya' t.text' olup olmadığını biliyor musunuz? –

+0

Bilmiyorum. Geri dönüşümü '--trace' ile denedim, ancak çıktı, taşıma işleminin herhangi bir içeriğini ifade etmiyor. –

+0

Göçleri iki parçaya ayırmayı deneyin ve geri almadaki özel durumun hangisi olduğunu görün. –

cevap

21

Rails'in change_table yöntemini geri döndürme sıkıntısı var gibi görünüyor. bu şekilde yerine yapıyor deneyin:

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

Sen docs veya Rails Guides tersine çevrilebilir komutların listesini görebilirsiniz.

+1

Teşekkürler, bu doğru görünüyor. Rehber ve dokümanları daha önce okudum ve 'change_table' sadece bir 'rename' ve 'add_column' içerdiğinden dolayı Rails tarafından otomatik olarak tersine çevrilebilir olacağını düşündüm. Ancak kılavuzu biraz daha yakından okudum, bunun benim için bir varsayım olduğunu ve mutlaka doğru olmadığını fark ettim (diğer bir deyişle, bu komutlar sadece bir "change_table" yuvasında değil, uzun biçimlerinde geri dönüşlüdür). Bu değişikliği yaptım ve işe yarıyor. Tekrar teşekkürler. –

İlgili konular