2012-01-23 4 views
23

मेरे पास जो लगता है वह एक बहुत ही सरल माइग्रेशन है। जब मैं db:rollback या db:migrate:redo पर प्रयास करता हूं तो किसी कारण से मुझे IrreversibleMigration त्रुटि मिलती है।यह माइग्रेशन अपरिवर्तनीय क्यों है? (change_table, नाम बदलें, टेक्स्ट)

प्रवासन सुचारू रूप से चलता है, लेकिन मैं इसे बदले में रखना चाहता हूं। मैं यह नहीं समझ सकता कि यह लिखित क्यों नहीं है। कोई विचार?

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

अगर यह मायने रखती है, "विवरण" स्तंभ एक पाठ स्तंभ है:

यहाँ पलायन है। मैं रेल 3.1/रूबी 1.9.2/PostgreSQL का उपयोग कर रहा हूँ। किसी भी मदद के लिए धन्यवाद।

+0

क्या आप जानते हैं कि यह 't.rename' या' t.text' है जो अपवाद पैदा कर रहा है? –

+0

मुझे नहीं पता। मैंने '--trace' के साथ अपने रोलबैक की कोशिश की, लेकिन आउटपुट माइग्रेशन की किसी भी सामग्री को संदर्भित नहीं करता है। –

+0

माइग्रेशन को दो टुकड़ों में तोड़ने का प्रयास करें और देखें कि रोलबैक पर कौन सा अपवाद उठाता है। –

उत्तर

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' में केवल' नाम बदलें 'और' add_column' शामिल है, यह रेल द्वारा ऑटो-रिवर्सिबल होगा। लेकिन गाइड को थोड़ा करीब पढ़ते हुए, मुझे एहसास हुआ कि यह मेरे हिस्से पर एक धारणा है और जरूरी नहीं कि एक सही (यानी, ये आदेश केवल अपने लंबे प्रारूप में उलटा हो, न कि 'change_table' घोंसला में)। मैंने यह परिवर्तन किया, और यह काम करता है। एक बार फिर धन्यवाद। –

संबंधित मुद्दे