2013-07-27 20 views
18

Rails 4.0 uygulamasında sqlite ile çalışıyorum (varsayılan olarak Rails için) Bir üst modele sahip olaylar (hackathons) için geliştirme ortamı), birçok Press_Blurbs olabilir Olay, için. Ben modellere bazı ilişkileri eklendiRaylar 4: schema.db "No tablehodError # undefined metodu" nu "Nil Tablo" tanımlanmamış yöntemi nedeniyle "Tabloyu boşaltılamadı" olaylarını gösterir.

Sonra
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 

:

Öncelikle ben sorun olmadan görünüşte koştu bazı göçler oluşturulan bazı iskele jeneratörleri ran

class Event < ActiveRecord::Base 
    has_many :press_blurbs 
end 

class PressBlurb < ActiveRecord::Base 
    belongs_to :event 
end 

... ve/ekledi Ben baktığımda Yine

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

: bir tablo başvuru eklemek için taşımayı koştu

# 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 

Diğer alakasız tabloları mükemmel ince schema.rb görünür, ancak bunlar yok: schema.db bu yerine tabloları tanımların gördükleri şeydir. Ne olduğuna dair bir fikrin var mı?

+0

"Rake db: migrate" komutunu çalıştırdığınızda şema güncelleştiriliyor mu? –

+0

Hayır. :(Dosya, sürüm numarası ile aynı kalıyor. – huertanix

cevap

20

Son geçişinizin yanlış olduğunu düşünüyorum. Geçersiz sütun türüne sahip olduğundan

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

Maalesef, veritabanı Bozuk bir durumda muhtemelen (yani hayır 'referans' sütunu türü vardır, ama sqlite yine de yapılmış): Ben bu bunu değiştirecektir. Umarım, sadece bir geliştirme veritabanıdır, böylece onu silebilir ve yeni başlayabilirsiniz.

+1

Yup, o sadece bir kayıt içeren bir dev DB idi; "event_id" sütunu oluşturmak için geçişleri değiştirme ve bir tamsayı veri türü kullanmak ve DB'yi yeniden oluşturmak trick – huertanix

+0

Veritabanını nasıl bırakıp DB? – camdixon

+8

'demet exec komisyonunu yeniden db: reset' genellikle etkilidir, ama schema.rb dosyanız yanlış olduğunda, bundle exec komisyonu db: drop db: db: göç etmek daha iyi çalışır. –

0

Sadece bu durumda birine yardımcı olur. Bunu bir sqlite dev db üzerinde yapıyordum ve yukarıda da belirtildiği gibi, muhtemelen tüm deneysel göçlerimden kazandığım bir halde. Sqlite dosyasını silerek, tüm geçişleri yeniden oluşturmak ve çalıştırmak, şimdi iyi.