2013-07-27 4 views
18

मैं SQLite के साथ एक रेल 4.0 आवेदन पर काम कर रहा है (रेल के लिए डिफ़ॉल्ट विकास पर्यावरण) घटनाओं (हैकथॉन) के लिए जिसमें एक मूल मॉडल, इवेंट है, जिसके लिए कई Press_Blurbs हो सकते हैं।रेल 4: schema.db से पता चलता घटनाओं "तालिका डंप नहीं किया जा सका" "निम्नलिखित NoMethodError # अपरिभाषित विधि की वजह से` [] 'शून्य के लिए: NilClass "

class CreateEvents < ActiveRecord::Migration 
    def change 
    create_table :events do |t| 
     t.string :city 
     t.string :theme 
     t.datetime :hackathon_start 
     t.datetime :hackathon_end 
     t.datetime :show_start 
     t.datetime :show_end 
     t.text :about 
     t.string :hack_rsvp_url 
     t.string :show_rsvp_url 

     t.timestamps 
    end 
    end 
end 

class CreatePressBlurbs < ActiveRecord::Migration 
    def change 
    create_table :press_blurbs do |t| 
     t.string :headline 
     t.string :source_name 
     t.string :source_url 
     t.string :logo_uri 

     t.timestamps 
    end 
    end 
end 

तो मैं मॉडल के लिए कुछ रिश्तों कहा::

सबसे पहले मैं कुछ मचान जनरेटर जो कुछ माइग्रेशन कि मैं इस मुद्दे के बिना उचित रूप में भाग गया बनाई भाग गया

class Event < ActiveRecord::Base 
    has_many :press_blurbs 
end 

class PressBlurb < ActiveRecord::Base 
    belongs_to :event 
end 

... और कहा/एक तालिका संदर्भ जोड़ने के लिए माइग्रेशन चलाया:

class AddEventRefToPressBlurbs < ActiveRecord::Migration 
    def change 
    add_column :press_blurbs, :event, :reference 
    end 
end 

फिर भी, जब मैं देखता हूं

# Could not dump table "events" because of following NoMethodError 
# undefined method `[]' for nil:NilClass 

# Could not dump table "press_blurbs" because of following NoMethodError 
# undefined method `[]' for nil:NilClass 

अन्य असंबंधित टेबल schema.rb बिल्कुल ठीक में दिखाई है, लेकिन इन नहीं: schema.db पर इस मैं क्या टेबल परिभाषाओं के बजाय है। कोई विचार क्या चल रहा है?

+0

जब आप 'रेक डीबी: माइग्रेट' चलाते हैं तो स्कीमा अपडेट करता है? –

+0

नहीं। :(फ़ाइल संस्करण संख्या के समान ही बनी हुई है। – huertanix

उत्तर

20

मुझे लगता है कि आपका अंतिम प्रवास गलत है। मैं इसे इस के लिए बदल जाएगा:

class AddEventRefToPressBlurbs < ActiveRecord::Migration 
    def change 
    add_reference :press_blurb, :event 
    end 
end 

दुर्भाग्य से, अपने डेटाबेस एक wonky राज्य में होने की संभावना है क्योंकि यह एक अवैध स्तंभ प्रकार है (अर्थात कोई 'संदर्भ' कॉलम प्रकार है, लेकिन SQLite वैसे भी इसे बनाया)। उम्मीद है कि यह सिर्फ एक विकास डेटाबेस है ताकि आप इसे हटा सकें और ताजा शुरू कर सकें।

+1

यूप, यह एक डीवी डीबी था जिसमें केवल एक रिकॉर्ड था; माइग्रेशन को "event_id" कॉलम बनाने के लिए बदलना और एक पूर्णांक डेटा प्रकार का उपयोग करना और डीबी को दोबारा बनाना चाल। – huertanix

+0

आप डेटाबेस को कैसे छोड़ेंगे और डीबी को फिर से बनाएंगे? – camdixon

+8

'बंडल निष्पादन रेक डीबी: रीसेट 'आमतौर पर प्रभावी होता है, लेकिन जब आपकी स्कीमा.आरबी गलत है, तो कुछ' बंडल निष्पादन रेक डीबी: ड्रॉप डीबी: डीबी बनाएं: माइग्रेट 'बेहतर काम करता है। –

0

बस अगर यह किसी की मदद करता है। मैं इसे एक स्क्लाइट देव डीबी पर कर रहा था, और जैसा ऊपर बताया गया है, यह मेरे सभी प्रायोगिक प्रवासों से एक भयानक स्थिति में होने की संभावना है। Sqlite फ़ाइल को हटाकर, सभी माइग्रेशन को पुन: प्रयास और चलाकर, अब ठीक है।

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