gpt4 book ai didi

ruby-on-rails - Rails 类名称/类型不适用于多态 has_many :through

转载 作者:数据小太阳 更新时间:2023-10-29 07:18:09 25 4
gpt4 key购买 nike

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

我用四个模型来做这个。

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

它的工作方式是通过一个连接模型(行项目),该模型具有一个称为可记录的多态关联。乍一看一切似乎都正常工作。 但是,检查行项目表明虽然 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它在 invoices 表中搜索 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它在 credits 表中搜索 recordable_id 引用的记录.请注意,recordable_type在这里被忽略。
  4. 同样适用于 belongs_to :debit分别。

由于您的 LineItem 可能只属于贷方借方,因此额外声明这些关联是没有意义的。您可以通过 recordable 引用这些协会。

关于ruby-on-rails - Rails 类名称/类型不适用于多态 has_many :through,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2123479/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com