在 Rails 中组织以下协会的最佳方式是啥?
Posted
技术标签:
【中文标题】在 Rails 中组织以下协会的最佳方式是啥?【英文标题】:What would be the best way to organise the following associations in Rails?在 Rails 中组织以下协会的最佳方式是什么? 【发布时间】:2018-04-11 09:05:32 【问题描述】:我在尝试组织一些模型和与我目前正在开发的应用程序的关联时遇到了困难。欢迎任何想法!
该应用以consultations
、invoices
和prescriptions
为中心。他们都会有关联的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 中组织以下协会的最佳方式是啥?的主要内容,如果未能解决你的问题,请参考以下文章