Tengo un sistema de facturación que gestiona débitos y créditos. Básicamente, el monto de la factura se obtiene por la suma de sus débitos y el saldo se obtiene tomando la suma de sus créditos y restando la cantidad total.Rails nombre/tipo de clase que no funciona para un hashman polimórfico: a través de
Estoy haciendo esto con cuatro modelos.
- factura
- de partidas individuales
- débito
- crédito
La forma en que funciona es a través de un modelo de unirse (Elemento de línea) que tiene una asociación polimórfica llamados grabable. Todo parece funcionar correctamente a primera vista. Sin embargo, al inspeccionar la línea de pedido, se muestra que, si bien el elemento grabable se muestra bien, el tipo grabable es nulo.
Aquí hay un desglose del código:
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
¿Puede alguien me punto en la dirección correcta aquí?
¿Cómo se asigna line_items a Credit/Debit? – Nazar
Esto sucede automáticamente a través de has_many: through. Por lo tanto, cuando ejecute Invoice.last.credits << Credit.new, LineItem se genera automáticamente y se genera con la derecha recordable_id y invoice_id. –
¿No debería el ': as' estar en' has_many: line_items', no las asociaciones 'has_many: through'? – mckeed