Rails:从父级继承列的模型,每个都有其他列

时间:2016-12-20 01:09:24

标签: ruby-on-rails postgresql inheritance polymorphic-associations sti

我正在创建一个适用于多种运动的日志应用程序(例如水肺潜水和跳伞),我正试图找到一种方法让孩子模型不仅继承父方法,还继承父(数据库)列。

图像可以更好地解释: Logbook database sample

因此,ScubaDiving,FreeDiving和SkyDiving类别下的任何模型都是我将从视图中调用的模型。
然而,父或潜水下的模型永远不会被调用,并且只是用他们的孩子填充数据库列(或许可能是方法)。

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

从我所做的研究中,我读过:

  1. 单表继承:
    • 只传递父方法,而不是数据库列
  2. 多态关联:
    • 我将我的情况与我发现的例子(照片,文章,帖子的评论)进行了比较,但我的Divespot和机场(相当于:照片,文章)不能有许多点(eq:注释)。
  3. 多表继承:
    • 无法使它工作,但它似乎最接近我想要的东西?
  4. 简单型号:
    • 我总是可以为每个孩子创建一个模型(没有父项)并重复代码。我仍然想知道是否有办法重构。
  5. 我正在使用Rails 5和PostGresql数据库。

1 个答案:

答案 0 :(得分:0)

  
      
  1. 单表继承:      
        
    • 只传递父方法,而不是数据库列
    •   
  2.   

当然所有类都继承数据库列。因为所有课程都是"生活"在同一个表中,它们具有相同的列。由于另一个原因,STI可能不是你的情况下最好的解决方案 - 每个模型的列似乎都不同,所以你会有一堆列是" NULL"对于没有这些列的模型。

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