0

我有以下型号:

  • 客户#这些代表第 3 方实体

  • GroupCo #集团内的个别公司

  • 供应商#这些是第 3 方实体。

  • 发票#这可能是以下之一:GroupCo 到客户、GroupCo 到其他 GroupCo、供应商到 GroupCo

在正常情况下,我只会有一个 ClientInv 模型和一个 SupplierInv 模型,具体取决于发票是给客户还是来自供应商。这里出现的问题是 GroupCo 向另一个 GroupCo 开票的地方。在这种情况下,第一个 GroupCo 充当供应商,第二个充当客户,我需要为每个 GroupCo 保留一个发票序列,无论他们是向客户还是其他 GroupCo 开票......所以这就是为什么我认为我不能拆分我的发票模型。

这不是一个特别不寻常的情况,所以我希望有人已经这样做了。

目前我对任何/所有建议持开放态度,如有必要,包括完全不同的模型。

我在 Rails 3.2.1 上。

4

2 回答 2

1

您所描述的问题,GroupCo通常可以通过继承解决发票和客户的问题。Client需要继承自CompanyGroupCo需要继承自Company。然后您可以向 a 发送发票Company,然后系统不在乎您是在谈论 aGroupCo还是Client

然而,给你一个具体的答案会很困难,因为看起来你还没有真正理解开票的领域问题。例如,您在谈论ClientInv模型时,SupplierInv模型让我认为您完全错误地处理了这个问题。

它们都是发票,只是系统的发票和系统的发票。但它们都是发票。您将不得不尽快处理信用票据和采购订单以及与发票相关的所有其他有趣的事情,您不想重复所有内容。

我还强烈建议您停止缩短您的类名称,这对于大型企业应用程序来说是一个坏习惯。称其为GroupCompany现状。和SupplierInvoice。和ClientInvoice

于 2012-04-24T13:30:30.057 回答
0

马特的建议帮助我解决了这个问题。请记住,我对多态发票的主要问题是作为客户和供应商从 GroupCo 获得发票。所以我就是这样做的。

发票具有以下属性:

invclient_type

invclient_id

invsupp_type

invsupp_id


发票有以下关联

属于_to:invclient,多态:true

属于_to:invsupp,多态:true


GroupCo 有以下协会

has_many :clientinvoices, class_name: :Invoice, as: :invclient

has_many :suppinvoices, class_name: :Invoice, as: :invsupp


有了上述内容,我可以使用 GroupCo (gco) 的实例执行以下操作

gco.clientinvoices
gco.suppinvoices

并使用 Invoice (inv) 的实例,我可以照常前往 belongs_to

inv.invclient 获取发票的客户
inv.invsupp 获取发票的供应商

于 2012-04-24T16:52:17.203 回答