[英]Rails: Class inheritance and complex polymorphic has_many :through association
[英]Rails class name/type not working for a polymorphic has_many :through
我有一个管理借方和贷方的发票系统。 基本上,发票金额是通过其借方总和获得的,余额是通过获取其贷方总额并将其减去总金额得出的。
我正在用四种型号做这件事。
它的工作方式是通过一个连接模型(行项),它具有一个名为recordable的多态关联。 乍一看似乎一切正常。 但是,检查订单项会显示,当recordable_id显示正常时,recordable_type为nil。
这是代码的细分:
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
任何人都可以指出我正确的方向吗?
您在LineItem
类上声明了不明确的关联。
简而言之, belongs_to
在您的班级中执行此操作:
belongs_to :invoice
创建方法invoice
,在发票表中搜索invoice_id
引用的记录 belongs_to :recordable, :polymorphic => true
创建一个recordable
的方法,在recordable_type.underscore.pluralize
表中搜索recordable_type.underscore.pluralize
引用的recordable_id
belongs_to :credit, :class_name => "Credit", :foreign_key => "recordable_id"
创建方法credit
,在信用表中搜索recordable_id
引用的recordable_id
。 请注意,此处忽略recordable_type
。 belongs_to :debit
。 由于您的LineItem可能只属于Credit 或 Debit,因此另外声明这些关联是没有意义的。 您可以通过recordable
关联来引用这些。
Invoice.last.credits << Credit.new
这是分配关联的正确方法我难以理解为什么没有拾取recordable_type
。
抓住稻草,但你试过:
Invoice.last.credits << Credit.create(:value => 1, :date => Time.now, ...)
我个人在使用Rails中的多类型多对多连接表时遇到了问题,这通常通过使用has_many_polymorphs
插件来解决。
很抱歉,这不能直接回答您的问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.