在 Rails 中组织以下协会的最佳方式是啥?

Posted

技术标签:

【中文标题】在 Rails 中组织以下协会的最佳方式是啥?【英文标题】:What would be the best way to organise the following associations in Rails?在 Rails 中组织以下协会的最佳方式是什么? 【发布时间】:2018-04-11 09:05:32 【问题描述】:

我在尝试组织一些模型和与我目前正在开发的应用程序的关联时遇到了困难。欢迎任何想法!

该应用以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】:

您可以进行多态实现。 ConsultationProductItem - has_many :productItem, as: product

InvoiceProductItem - has_many :productItem, as: product

处方产品项目 - has_many :productItem, as: product

产品项目 -belongs_to :product, polymorphic: true

【讨论】:

谢谢。我认为多态可能很有用,但在我的情况下,我会想要使用完全相同的项目,所以不会是其中一个的情况。

以上是关于在 Rails 中组织以下协会的最佳方式是啥?的主要内容,如果未能解决你的问题,请参考以下文章

SpriteKit - 组织保存的游戏数据的最佳方式是啥?

在网站上组织自动付款的最佳方式是啥?

组织地理参考数据的最佳方式是啥?

Rails 3.1 资产管道供应商/资产文件夹组织

在 Rails 中存储应用程序特定配置的最佳方式是啥?

当人们拥有多项工作时,使用人员、职位和团队对组织进行建模的最佳方法是啥? [关闭]