繁体   English   中英

Rails类名称/类型不适用于多态has_many:through

[英]Rails class name/type not working for a polymorphic has_many :through

我有一个管理借方和贷方的发票系统。 基本上,发票金额是通过其借方总和获得的,余额是通过获取其贷方总额并将其减去总金额得出的。

我正在用四种型号做这件事。

  1. 发票
  2. 订单项
  3. 借方
  4. 信用

它的工作方式是通过一个连接模型(行项),它具有一个名为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在您的班级中执行此操作:

  1. belongs_to :invoice创建方法invoice ,在发票表中搜索invoice_id引用的记录
  2. belongs_to :recordable, :polymorphic => true创建一个recordable的方法,在recordable_type.underscore.pluralize表中搜索recordable_type.underscore.pluralize引用的recordable_id
  3. belongs_to :credit, :class_name => "Credit", :foreign_key => "recordable_id"创建方法credit ,在信用表中搜索recordable_id引用的recordable_id 请注意,此处忽略recordable_type
  4. 同样适用于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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM