Frage

ich ein Abrechnungssystem haben, die Belastungen und Gutschriften verwaltet. Grundsätzlich ist der Rechnungsbetrag von der Summe seiner Belastungen erhalten wird, und das Gleichgewicht, indem die Summe der Gutschriften abgeleitet ist und gegen die Gesamtmenge subtrahiert wird.

Ich tue dies mit vier Modellen.

  1. Rechnung
  2. Line Item
  3. Soll
  4. Kredit

Die Funktionsweise ist über ein Modell (Einzelposten) verbinden, die eine polymorphe Vereinigung namens beschreibbare. Alles scheint richtig auf den ersten Blick zu arbeiten. Um jedoch die Position zeigt Inspektion, dass, während die recordable_id zeigt sich in Ordnung, die recordable_type ist gleich Null.

Hier ist ein Zusammenbruch des Code:

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

Kann jemand Punkt mich in die richtige Richtung hier?

War es hilfreich?

Lösung

Sie deklarieren mehrdeutig Verbände auf Ihrer LineItem Klasse.

Auf den Punkt gebracht, belongs_to tut dies in Ihrer Klasse:

  1. belongs_to :invoice schafft ein Verfahren invoice, die die Rechnungen Tabelle für einen Datensatz von invoice_id
  2. verwiesen sucht
  3. belongs_to :recordable, :polymorphic => true schafft ein Verfahren recordable, die die recordable_type.underscore.pluralize Tabelle für einen Datensatz von recordable_id
  4. verwiesen sucht
  5. belongs_to :credit, :class_name => "Credit", :foreign_key => "recordable_id" schafft ein Verfahren credit die Suche durch die Kredite Tabelle für einen Datensatz von recordable_id verwiesen. Beachten Sie, dass recordable_type wird hier ignoriert.
  6. Gleiches gilt jeweils belongs_to :debit.

Da Ihr LineItem nur, gehören entweder zu einem Kredit oder ein Debit macht es keinen Sinn, diese Assoziationen zu erklären zusätzlich. Sie können über die recordable Verband auf diese beziehen.

Andere Tipps

Invoice.last.credits << Credit.new

Dies ist der richtige Weg, Verbände bei der Zuordnung zu ich bin ratlos, warum die recordable_type nicht abgeholt wird.

Clutching an Strohhalme hier aber haben Sie versucht:

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

Ich habe persönlich hatte Probleme, wenn Multi-Typ mit many-to-many verbinden Tabellen in Rails, die oft mit der has_many_polymorphs Plugin.

Es tut uns Leid, dass dies nicht direkt Ihre Frage beantworten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top