在Rails中组织以下关联的最佳方法是什么?

时间:2018-04-11 09:05:32

标签: ruby-on-rails database associations

我在这里碰到了一堵砖墙,试图用我正在研究的应用程序组织一些模型和关联。任何想法都会受到欢迎!

该应用以consultationsinvoicesprescriptions为中心。它们都有关联的productItems(基本上是产品,客户,数量等的组合)。

咨询将总是与相应的发票和处方共享相同的产品。问题出在了,但并非所有发票或处方都与咨询相关联。可以有独立的发票或处方。

在这种情况下,我很难找到一个共同的“祖先”,因为我想要一个更好的词,我可以保留所有的共享数据,然后在不同的模型中使用相同的参考。

作为替代方案,我考虑为每个协会创建单独的模型,如下所示,但我担心的是重复:

ConsultationProductItem
 - belongs_to animal
 - belongs_to product
 - belong_to consultation

InvoiceProductItem
 - belongs_to animal
 - belongs_to product
 - belong_to invoice

PrescriptionProductItem
 - belongs_to animal
 - belongs_to product
 - belong_to prescription

看起来很脆弱,因为这些是在多个模型中共享的相同数据。

通过上述设置,我还必须定期拍摄属于咨询的各种物品,并将其复制到相应的发票或处方中。

我觉得我已经绕圈子了,我目前正在用Rails或Meteor / Mongo构建的应用程序的后端之间徘徊,我觉得Rails是坚如磐石的协会。通常很擅长执行,但似乎无法弄清楚使用哪种技术。任何想法都非常感激!

编辑:

我现在想知道我是否可以创建一个“祖先”型号,如下所示:

ProductGroup
  - id

Consultation
  - productGroup

Invoice
  - productGroup

Prescription
  - productGroup

ProductItem
  - belongs_to product_group
  - animal
  - product
  - quantity

1 个答案:

答案 0 :(得分:0)

你可以进行多态实现。

ConsultationProductItem
  - has_many:productItem,as:product

<强> InvoiceProductItem
- has_many:productItem,as:product

<强> PrescriptionProductItem
  - has_many:productItem,as:product

<强> ProductItem
  - belongs_to:product,polymorphic:true