2013-07-27 10 views
18

Pracowałem nad aplikacją Rails 4.0 z sqlite (domyślnie dla Railsów środowisko programistyczne) dla zdarzeń (hackathonów), które mają model macierzysty, Event, dla którego może istnieć wiele Press_Blurbs.Rails 4: schema.db pokazuje zdarzenia "Nie można zrzucić tabeli" "z powodu następującego NoMethodError # niezdefiniowanej metody` [] 'dla zer: NilClass "

Pierwszy wpadłem kilka generatorów rusztowania, które stworzyły pewne migracje że wpadłem pozornie bez emisji:

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 

Potem dodano kilka relacji do modeli:

class Event < ActiveRecord::Base 
    has_many :press_blurbs 
end 

class PressBlurb < ActiveRecord::Base 
    belongs_to :event 
end 

... i dodał/prowadził migracji, aby dodać odniesienie tabeli:

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

niemniej jednak, kiedy patrzę w schema.db to co widzę zamiast definicji tabel:

# 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 

Inne niepowiązane tabele pokazują się w schema.rb perfekcyjnie, ale to nie. Masz pojęcie, co się dzieje?

+0

Po uruchomieniu 'rake db: migrate' wykonuje aktualizację schematu? –

+0

Nie. :(Plik pozostaje taki sam jak numer wersji – huertanix

Odpowiedz

20

Myślę, że ostatnia migracja jest nieprawidłowa. Chciałbym zmienić go na to:

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

Niestety Twoja baza danych jest prawdopodobnie w stanie wonky, ponieważ ma nieprawidłowy typ kolumny (to znaczy nie ma „odniesienia” typ kolumny, ale SQLite zrobiliśmy to w każdym razie). Mamy nadzieję, że jest to po prostu baza danych dla programistów, więc możesz ją po prostu usunąć i zacząć od nowa.

+1

Tak, był to dev DB z tylko jednym rekordem w nim, Zmiana migracji do utworzenia kolumny "event_id" i użycie typu danych liczbowych całkowitych i odtworzenie DB zrobiło – huertanix

+0

W jaki sposób upuścić bazę danych i ponownie utworzyć DB? – camdixon

+8

'bundle exec rake db: reset' jest zwykle skuteczne, ale gdy plik schema.rb jest nieprawidłowy, coś jak' bundle exec rake db: drop db: create db: migrate' działa lepiej. –

0

Na wszelki wypadek pomaga to komuś. Robiłem to na sqlite dev db, i jak wspomniano powyżej, było prawdopodobne, w stanie nieporęcznym ze wszystkich moich eksperymentalnych migracji. Usuwając plik sqlite, odtwarzając i uruchamiając wszystkie migracje, teraz jest w porządku.

Powiązane problemy