我有以下型号:
客户#These代表第三方实体
GroupCo#集团内的个人公司
供应商#These是第三方实体。
发票#这可能是以下之一:GroupCo到客户,GroupCo到其他GroupCo,供应商到GroupCo
在正常情况下,我只会拥有ClientInv模型和SupplierInv模型,具体取决于发票是针对客户还是来自供应商。这里出现的问题是GroupCo向另一家GroupCo开具账单。在这种情况下,第一个GroupCo充当供应商,第二个充当客户,我需要为每个GroupCo保留一个发票序列,无论他们是计费客户还是其他GroupCos ....这就是为什么我认为我不能分裂我的发票模型。
这不是一个特别不寻常的情况所以我希望有人会这样做。
目前我对任何/所有建议持开放态度,包括必要时完全不同的模型。
我在Rails 3.2.1上。
答案 0 :(得分:1)
您正在描述的问题,GroupCo
可以获得发票以及客户端通常可以通过继承来解决。 Client
需要继承Company
,GroupCo
需要继承Company
。然后,您可以将发票发送到Company
,然后系统不在乎您是在谈论GroupCo
还是Client
。
然而,给你一个具体的答案会很难,因为看起来你还没有真正理解发票的域名问题。例如,当您谈论ClientInv
模型和SupplierInv
模型时,我会认为您完全以错误的方式处理此问题。
它们都是发票,只是系统的发票和系统中的发票。但它们都是发票。您将不得不尽快处理信用票据和采购订单以及开票所涉及的所有其他有趣的事情,您不希望复制所有内容。
我还认真地建议你不要缩短你的班级名称,这对于大型企业应用来说是一个坏习惯。致电GroupCompany
是什么。并SupplierInvoice
。并ClientInvoice
。
答案 1 :(得分:0)
马特的建议帮助我解决了这个问题。请记住,我对Polymorphic发票的主要问题是从GroupCo作为客户和供应商进入发票。所以这就是我做到的。
Invoice具有以下内容:
invclient_type
invclient_id
invsupp_type
invsupp_id
发票具有以下关联
belongs_to:invclient,polymorphic:true
belongs_to:invsupp,polymorphic: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到发票的供应商