0

私は次のモデルを持っています:

  • クライアント #これらはサード パーティ エンティティを表します

  • GroupCo #グループ内の個別企業

  • サプライヤー #これらはサード パーティのエンティティです。

  • Invoice #これは、GroupCo からクライアント、GroupCo から他の GroupCo、サプライヤーから GroupCo のいずれかです。

通常の状況では、請求書がクライアント宛てかサプライヤーからのものかによって、ClientInv モデルと SupplierInv モデルを使用するだけです。ここで発生する問題は、GroupCo が別の GroupCo に請求する場合です。この場合、最初の GroupCo はサプライヤーとして機能し、2 番目の GroupCo はクライアントとして機能し、クライアントまたは他の GroupCo に請求しているかどうかに関係なく、GroupCo ごとに 1 つの請求書シーケンスを保持する必要があります。請求モデル。

これは特に珍しい状況ではないので、誰かがすでにこれを行っていることを願っています。

現在、必要に応じて完全に異なるモデルを含むあらゆる提案を受け付けています。

私は Rails 3.2.1 を使用しています。

4

2 に答える 2

1

請求書とクライアントを取得できるという、あなたが説明している問題GroupCoは、通常、継承によって解決できます。Clientから継承する必要があります。 から継承する必要がCompanyあります。次に、に請求書を送ることができます。システムは、あなたが話しているのが か かを気にしません。GroupCoCompanyCompanyGroupCoClient

ただし、具体的な答えを出すのは難しいでしょう。なぜなら、あなたはまだ請求書発行のドメインの問題を理解していないように見えるからです。たとえば、ClientInvモデルとモデルについて話すと、SupplierInvこの問題に完全に間違った方法で取り組んでいると思います。

どちらも請求書で、システムへの請求書とシステムからの請求書です。しかし、どちらも請求書です。すぐにクレジット ノートや発注書を処理する必要があります。また、請求に関連する他のすべての楽しいことも処理する必要があります。すべてを重複させたくはありません。

また、クラス名を短くするのをやめることを強くお勧めします。これは、大規模なエンタープライズ アプリにとって悪い習慣です。あるがままを呼び出しGroupCompanyます。そしてSupplierInvoice。そしてClientInvoice

于 2012-04-24T13:30:30.057 に答える
0

マットの提案は、これを解決するのに役立ちました。ポリモーフィック インボイスに関する私の主な問題は、クライアントとサプライヤーの両方として GroupCo からインボイスを取得することでした。これが私がやった方法です。

請求書には次の属性があります。

invclient_type

invclient_id

invsupp_type

invsupp_id


請求書には次の関連付けがあります

belongs_to :invclient、ポリモーフィック: true

belongs_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 に答える