2013-07-27 5 views
18

Ich habe an einer Rails 4.0 Anwendung mit sqlite (Standard für Rails Entwicklungsumgebung) für Ereignisse (Hackathons) mit einem übergeordneten Modell, Event, für das es viele Press_Blurbs geben kann.Rails 4: schema.db zeigt "Konnte nicht dump Tabelle" Ereignisse "wegen der folgenden NoMethodError # undefined Methode` [] 'für nil: NilClass "

Zuerst lief ich einige Gerüste Generatoren, die einige Migrationen geschaffen, die ich ohne Problem scheinbar lief:

class Event < ActiveRecord::Base 
    has_many :press_blurbs 
end 

class PressBlurb < ActiveRecord::Base 
    belongs_to :event 
end 

... und hinzugefügt /:

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 

Dann einige Beziehungen zu den Modellen, die ich hinzugefügt hat eine Migration ausgeführt, um einen Tabellenverweis hinzuzufügen:

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

Trotzdem, wenn ich schaue bei schema.db ist das, was ich anstelle von Tabellen Definitionen siehe:

# 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 

Andere unabhängige Tabellen in schema.rb zeigen sich völlig in Ordnung, aber diese nicht. Irgendeine Idee was ist los?

+0

Wenn Sie 'rake db: migrate 'ausführen, wird das Schema aktualisiert? –

+0

Nein. :(Die Datei bleibt die gleiche wie die Versionsnummer. – huertanix

Antwort

20

Ich denke, Ihre letzte Migration ist falsch. Ich würde es dies ändern:

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

Leider ist Ihre Datenbank in einem wackeligen Zustand wahrscheinlich ist, weil es eine ungültige Spaltentyp hat (das heißt, es gibt keinen ‚Referenz‘ Spaltentyp, aber SQLite machte es sowieso). Hoffentlich ist es nur eine Entwicklungsdatenbank, also können Sie sie einfach löschen und neu starten.

+1

Yup, es war eine dev DB mit nur einem Datensatz; Ändern der Migrationen, um eine Spalte "event_id" zu erstellen und einen Ganzzahldatentyp zu verwenden und die DB neu zu erstellen – huertanix

+0

Wie würden Sie die Datenbank löschen und die DB neu erstellen? – camdixon

+8

'bundle exec rake db: reset' ist normalerweise effektiv, aber wenn Ihre schema.rb ist falsch, so etwas wie' bundle exec rake db: db: db: create db: migrieren "funktioniert besser. –

0

Nur für den Fall, dass dies jemand hilft. Ich tat dies auf einem SQL-Dev-db, und wie oben erwähnt, war es wahrscheinlich in einem wackeligen Zustand von all meinen experimentellen Migrationen. Durch das Löschen der SQLite-Datei, das erneute Erstellen und Ausführen aller Migrationen ist es jetzt in Ordnung.

Verwandte Themen