2011-10-05 16 views
5

A TimeLog, Faturalanabilir veya Faturalandırılamaz ve bir Fatura birçok TimeLog içerir. Veritabanımızın null olmayan yabancı anahtarları olamaz, bu yüzden bir katılma modeli kullanıyoruz. Kod:has_one: yoluyla yapı_association sağlamaz

class TimeLog < ActiveRecord::Base 
    has_one :invoices_time_logs 
    has_one :invoice, through: :invoices_time_logs 
end 

class Invoice < ActiveRecord::Base 
    has_many :invoices_time_logss 
    has_many :time_logs, through: :invoices_time_logss 
end 

class InvoicesTimeLogs 
    belongs_to :invoice 
    belongs_to :time_log 
end 

Invoice.first.time_logs.build çalışıyor, ancak TimeLog.first.build_invoice build_association yöntemi kullanılabilir hale gerekiyordu has_one değil mi

NoMethodError: undefined method `build_invoice' for #<TimeLog:0x4acd588>

verir?

Güncelleme: build_assocation_test: Bu soru için örnek bir repo yaptık

. , Repo klonlamak, sorun göremiyorum paket yüklemek, taşıma işlemini (veya şema yük) ve daha sonra bir raylar konsolunda için:

Invoice.create 
Invoice.first.time_logs.build 
TimeLog.create 
TimeLog.first.build_invoice 
+0

DB'nizde en az 1 Timelog olduğunu doğrulayabilir misiniz? Veya tam NoMethodError hatası gönderin. –

cevap

1

Ben bir yazım hatası olduğuna inanıyorum.

class Invoice < ActiveRecord::Base 
    has_many :invoices_time_logss 
    has_many :time_logs, through: :invoices_time_logss 
end 

olmalıdır ...

class Invoice < ActiveRecord::Base 
    has_many :invoices_time_logs 
    has_many :time_logs, through: :invoices_time_logs 
end 

hayır?

+0

Bunlar arasında bir fark göremiyorum. Ve Invoice.time_logs.build yapabildiğim ve düzgün çalıştığım için Invoice sınıfımın doğru ayarlandığından eminim. –

+0

Yazım hatası yazdım :) Tekrar kontrol et, özür dilerim. –

+0

Huh, garip, belki işe yaramaz, sadece bana garip görünüyor. Biraz işe başladığımda kontrol edeceğim. –

İlgili konular