Rails协会指导

Rails Association Guidance

我是 rails 4 的新手。我学习了很多教程并尝试解决以下情况。但仍然没有成功。谁能指出我正确的方向。如何处理以下场景的关联。

场景:

1. Patient can have many surgeries.

2. Surgery has two types (Patient will undergo only one surgery at a time.)
   a.) Surgery Type A (if chosen, record 15 column fields values)
   b.) Surgery Type B (if chosen, record 25 column fields values)

3. Surgery Type A can be of any one type.
  a.) unilateral (if chosen, record 10 column fields for unilateral & skip bilateral)
  b.) bilateral  (if chosen, record 10 column fields for bilateral  & skip unilateral)

4. Surgery Type B can be of any one type.
  a.) unilateral (if chosen, record 10 column fields for unilateral & skip bilateral)
  b.) bilateral  (if chosen, record 10 column fields for bilateral  & skip unilateral)

我需要一些建议来正确处理关联。这有点令人困惑,我需要根据每种手术类型和子类型(单侧或双侧)在 table 中记录很多字段值。什么是处理这种情况下关联的最佳方式,随后可以轻松获取数据以用于报告目的。

提前致谢

所以,你的情况的复杂部分是你有一件事(外科)可以有很多不同的类型,不同的类型有不同的领域。有许多不同的方法可以解决这个问题,我不认为就 'best way'.

达成广泛共识

第一个也是最简单的方法(至少从数据模型的角度来看)是 'just put it all in one thing' - 制作一个手术模型,给它一个 surgery_type 字段来指定它是哪种类型,然后给一条记录所有 45 个字段,然后在您的视图中使用逻辑仅显示基于 surgery_type 字段的相关字段,并验证仅存在这些字段,依此类推。

一个更复杂的变体是 Single Table Inheritance,其中您有多个模型,但它们都位于同一个 table。

这种方法有一些明显的缺点 - 45 个字段很多,而且当大多数字段对于任何给定记录都是空的时,感觉很浪费(并且可能会影响性能)。这就是存在各种其他模式的原因。

因此,作为替代方案,还有 Multiple Table Inheritance, which Rails implements via polymorphism。在这个模式中,一个 Patient has_many Surgeries,但这是一个多态关联,意味着它可以引用其他多种类型的对象。在此模式中,您将有两个或四个模型代表手术类型,并将每个模型与患者相关联。例如,UnilateralEndocrineSurgery 模型只需要它的十个字段。多态性的缺点包括使处理 Surgery 对象组变得更加困难,因为它们具有不同的类型并且响应不同的方法。

这些方法的相对优势很复杂并且经常引起争论,列举它们超出了 SO 答案的范围。