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

我正在用四个模型来做这个。

  1. 发票
  2. 行项目
  3. 借方
  4. 信用

它的工作方式是通过一个连接模型(行项目),该模型具有称为可记录的多态关联。乍一看一切似乎都工作正常。 然而,检查行项目显示,虽然 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 在你的班级中这样做:

  1. belongs_to :invoice 创建一个方法 invoice 它搜索 发票 引用记录的表 invoice_id
  2. belongs_to :recordable, :polymorphic => true 创建一个方法 recordable 它搜索 recordable_type.underscore.pluralize 引用记录的表 recordable_id
  3. belongs_to :credit, :class_name => "Credit", :foreign_key => "recordable_id" 创建一个方法 credit 它通过搜索 学分 引用记录的表 recordable_id. 。注意 recordable_type 这里被忽略。
  4. 同样适用于 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 插入。

抱歉,这并不能直接回答您的问题。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top