5

Kullanıcılar ve Teknisyenler için bilgileri saklamak üzere tek bir "Hesaplar" tablosuna sahip bir STI modeli kullanıyorum (örn. Kullanıcı < Hesabı, Teknisyen < Hesabı). Her şey bir işlevsel açıdan çalışır, ama her şey çalışan birim testleri patlayabilir:Ruby on Rails Tek Tablosu Kalıtım (STI) ve birim test problemi (PostgreSQL ile)

... 8) Hata: test_the_truth (UserTest): ActiveRecord :: StatementInvalid: PGError: HATA: ilişkisi "teknisyen" yok : ... "teknisyenler" DAN SİL

Esasen, standart çerçeve teknisyenleri ve kullanıcılar tablolar (veya PostgreSQL deyimiyle "ilişkiler") aslında, mevcut ve kalmamasıdır tanımıyor, should Hesaplara taklit edilir.

Herhangi bir fikrin var mı? Ben RoR için nispeten yeniyim ve hep birlikte STI ripping olmadan bunu düzeltmek için bir kayıp yaşıyorum.

+0

hatayı üretiyor birim testi ve hata gerçekleştiğinde o aradığını yöntemi hem gönderebilir miyim? –

cevap

12

sorun mevcudiyetine bağlı olduğu ortaya çıkıyor benzer şekilde adlandırılmış tablolara veri ekleyebilmesi beklenen çerçeve.

+1

<3 yığın taşması. Keşke seni daha fazla modifiye edebilirdim! – nfm

0
  • Hesap tablonuzda bir 'tip' sütunu bulunduğundan emin misiniz? CYB'nin işe yaraması için birine ihtiyacın var.
  • Aslında 'türü' adı verilen bir sütun ile bazı veritabanı uyumluluğu sorun yaşadım ve bazen 'tür' bu hafifletmek için geçtik. Bu sorun olabilir; self.inheritance_column = temel sınıfta (Hesap) ayarlamayı deneyin ve bunun yardımcı olup olmadığını görün.

    ./test/fixtures/technicians.yml ./test/fixtures/users.yml

    Bu şekilde mantıklı:

+0

Hesaplar bir "type" sütunu içeriyordu ve maalesef, adını "tür" olarak değiştirmeye yönelik önerileriniz yardımcı olmadı; sorunlar devam ediyor. –

2

Ben çocuk modeli için YAML dosyası kaldırarak çözüldü benzer bir sorunu vardı. Esasen raylar/test/fikstürlerde oluşturulan fikstürlere bakıyor ve her biri için tabloları boşaltmaya çalışıyor, böylece sizin için onları yeniden yükleyebiliyor.

Benim durumumda ben otomatik olarak yeni bir fikstür oluşturur modeli komutunu üretmek/komut dosyasını çalıştırın almıştı. Sonra modeli uygun ebeveyn sınıfından miras aldım. Armatür hala var olduğundan, raylar armatürleri yüklemeden önce ÇOCUKLARDAN SİLİNMEKTEDİ.

Eğer gerçekten ebeveyn modelleri kilitlerini kullanın ve uygun model adının tipi alanını belirlesin veri yükleme gerekiyorsa

.