Rails 类名/类型不适用于多态 has_many :through
-
22-09-2019 - |
题
我有一个管理借方和贷方的发票系统。基本上,发票金额是通过借方总和得出的,余额是通过贷方总和减去总金额得出的。
我正在用四个模型来做这个。
- 发票
- 行项目
- 借方
- 信用
它的工作方式是通过一个连接模型(行项目),该模型具有称为可记录的多态关联。乍一看一切似乎都工作正常。 然而,检查行项目显示,虽然 recordable_id 显示正常,但 recordable_type 为零。
这是代码的分解:
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_id
belongs_to :credit, :class_name => "Credit", :foreign_key => "recordable_id"
创建一个方法credit
它通过搜索 学分 引用记录的表recordable_id
. 。注意recordable_type
这里被忽略。- 同样适用于
belongs_to :debit
分别。
由于您的 LineItem 可能只属于 Credit 或者 a 借方 额外声明这些关联是没有意义的。您可以通过以下方式参考这些内容 recordable
协会。
其他提示
Invoice.last.credits << Credit.new
这是分配关联的正确方法,我很困惑为什么 recordable_type
没有被拾取。
在这里抓住救命稻草,但你尝试过吗:
Invoice.last.credits << Credit.create(:value => 1, :date => Time.now, ...)
我个人在 Rails 中使用多类型多对多连接表时遇到过问题,通常可以通过使用 has_many_polymorphs
插入。
抱歉,这并不能直接回答您的问题。
不隶属于 StackOverflow