5
aracılığıyla

Borçları ve kredileri yöneten bir faturalandırma sistemim var. Temel olarak fatura tutarı borçlarının toplamı ile elde edilir ve bakiye, kredilerinin toplamı alınarak ve toplam tutara karşı çıkarılarak elde edilir.Sınıf adı/türü bir polimorfik has_many için çalışmıyor:

Bunu dört modelle yapıyorum. Bir polimorfik ilişki vardır

  1. Fatura
  2. Satır Öğesi
  3. Borç
  4. Kredi

bir katılmak modeli (Satır Öğesi) yoluyladır işler böyle Kaydedilebilir aradı. Her şey ilk bakışta düzgün çalışıyor gibi görünüyor. Ancak, satır öğesinin incelenmesi, kaydedilebilir_kimliği iyi gösterirken, kaydedilebilir_tür'ün sıfır olduğunu gösterir.

class Invoice < ActiveRecord::Base 
    has_many :line_items, :dependent => :destroy 
    has_many :debits, :through => :line_items, :as => :recordable 
    has_many :credits, :through => :line_items, :as => :recordable 
end 

class LineItem < ActiveRecord::Base 
    belongs_to :invoice 
    belongs_to :recordable, :polymorphic => true 
    belongs_to :credit, :class_name => "Credit", :foreign_key => "recordable_id" 
    belongs_to :debit, :class_name => "Debit", :foreign_key => "recordable_id" 
end 

class Credit < ActiveRecord::Base 
    has_many :line_items, :as => :recordable, :dependent => :destroy 
end 

class Debit < ActiveRecord::Base 
    has_many :line_items, :as => :recordable, :dependent => :destroy 
end 

kimse burada doğru yöne işaret edebilir: Burada

bir kodun aşağı kırılma nedir?

+0

Kredi/Borç'a line_items nasıl atanır? – Nazar

+0

Bu, otomatik olarak has_many: yoluyla gerçekleşir. Böylece Invoice.last.credits << Credit.new yaptığınızda, LineItem otomatik olarak oluşturulur ve doğru recordable_id ve invoice_id ile oluşturulur. –

+0

": has_many: line_items" de değil, "has_many: through" dernekleri değil mi? – mckeed

cevap

3

LineItem sınıfında belirsiz çağrışımlar bildiriyorsunuz. Özetle

, belongs_to sınıfınızdaki yapar:

  1. belongs_to :invoiceinvoice_id
  2. belongs_to :recordable, :polymorphic => true tarafından başvurulan bir kayıt için faturalar tablo arar bir yöntem invoice oluşturur arar bir yöntem recordable yaratır recordable_id
  3. belongs_to :credit, :class_name => "Credit", :foreign_key => "recordable_id" başvurulan bir kayıt için recordable_type.underscore.pluralize tablosu bir araya geldi recordable_id tarafından başvurulan bir kayıt için kredisi kredisi üzerinden yapılan aramalar credit. Not, recordable_type burada yok sayılır.
  4. , belongs_to :debit için de geçerlidir.

sizin LineItem sadece ya bir Kredi veya ilave olarak bu ilişkileri beyan etmenin bir anlamı bir Borç ait olabilir beri. Bunlara recordable derneği üzerinden başvurabilirsiniz.

0

Invoice.last.credits < < Credit.new

Bu benim recordable_type kaldırdı varlık değildir neden olarak stumped için dernek atama doğru yoldur.

burada saplarda Clutching ama denedi:

Invoice.last.credits << Credit.create(:value => 1, :date => Time.now, ...) 

birçok çoğa sıklıkla has_many_polymorphs eklentiyi kullanarak çözüldü Rails tabloları katılmak çok türünü kullanırken şahsen sorunları yaşadım .

Bu sorunun doğrudan yanıt vermediği için üzgünüz.

+0

Evet, uygulama davranışları artık borçlar için çok sayıda fatura ilişkisine ihtiyaç duymadığı için doğrudan ilişki oluşturdum. Yine de neden toplanmadığından emin değilim. Geçmişte farklı nesneler için aynı ayarları yaptım. Belki korumalı bir isme rastladım ama bunu düşünemiyorum. Başlangıçta item_id ve item_type kullanıyordum, ancak recordable_id 'e geçtikten sonra yazdı ve hala çalışmıyordu. Tamamen güldü. –

İlgili konular