Rails:从 parent 继承列的模型,每个模型都有额外的列

Rails: Models that inherit columns from parent, and each have additional columns

我正在创建一个适用于多种运动的日志应用程序(例如 scuba-diving 和 sky-diving),我正在尝试找到一种方法来拥有 children 模型不仅继承 parent 方法,而且继承 parent(数据库)列。

一张图片可能会更好地解释: Logbook database sample

因此,ScubaDiving、FreeDiving 和 SkyDiving 类别下的任何模型都是我将从视图中调用的模型。
然而,Parent 或 Diving 下的模型将永远不会被调用,而只是为了用数据库列(可能还有方法)填充它们的 children。

创建模型 + 关联 + 继承的最佳方法是什么?

根据我所做的研究,我了解到:

  1. 单一Table继承:
    • 只会传递 parent 方法,不会传递数据库列
  2. 多态关联:
    • 我将我的情况与我找到的示例(对照片、文章、帖子的评论)进行了比较,但是我的 Divespot 和 Airport(相当于:照片、文章)不能有 很多 斑点(eq:评论)。
  3. 多重Table继承:
    • 无法让它工作,但它似乎最接近我要找的东西?
  4. 简单模型:
    • 我总是可以为每个 child(没有 parent)创建一个模型并重复代码。还是想看看有没有refacto的方法

我正在使用 Rails 5 和 PostGresql 数据库。

  1. Single Table Inheritance:
    • Will only pass parent methods, not database columns

当然所有类 继承数据库列。由于同一个 table 中的所有 类 "live",它们具有相同的列。由于另一个原因,STI 可能不是您情况下的最佳解决方案 - 每个模型的列似乎都不同,因此对于没有这些列的模型,您会有一堆列 "NULL"。

我建议考虑为每个 类 创建一个模型/table,然后将子对象链接到代表父对象的对象。然后,您可以将名称、位置等方法委托给 Spot。然后您可能需要使用多态关联。你可以有点花哨,试试 "proper" MTI,见 this guide