没有(单表)继承Rails-Ember

时间:2017-02-04 21:41:28

标签: inheritance ember-data associations rails-postgresql rails-api

我正在努力弄清楚如何设计我的PostgreSQL数据库表和Rails API模型,以便它们的关联可以在我的Ember前端以1:1实现,其中Ember和Rails可以通过通常理解的JSON流畅地进行通信。 (我在Rails端使用ActiveModelSerializers,在Ember端使用ActiveModelAdapter。)

基本想法之前我开始编写任何代码:rough class diagram

  • 产品可以是Type1,Type2等,也就是说,子类型继承产品(我认为它是一个抽象类 - 没有什么应该是只是产品)
  • 每个Type1可以有几个Type2作为其一部分,每个Type2可以通过Type2_container
  • 属于几个Type1
  • 每个Type类都有许多唯一属性,但也有许多通过Product class
  • 的常规属性
  • 来源是指一个产品和一个商店,即产品有许多商店来源

现在面临的挑战是:我不能在仅支持单表继承的Rails中实现这样的继承。使用STI,Product表将是50列以上的列,其中只有10个左右将在继承类之间共享。不理想......

另一方面,我不知道如何在Product和Type1 / 2/3之间建立简单的1:1关系,以便

  1. 每个产品始终指向一个类型表,
  2. Rails和Ember Data都知道如何解释Product和Type1 / 2/3之间的关联,这样每次我在Ember中检索/修改Product时,我也会检索/修改它的Type特定属性。
  3. 我考虑的第三个选项 - 包含“name”,“value_num”,“value_int”,“value_boolean”和“value_text”列的属性表。产品将具有has_many属性,每个属性将属于产品。这将取消类型表,但也会导致不必要的大量行(例如100个产品,每个属性有40个属性= 4000行,而只有200个产品类型关联)。这会使访问产品属性变得更加困难(?)。

    感谢任何帮助。另外,如果您更愿意为我想要实现的目标建议不同的数据库/前端/后端,请执行此操作。我对大部分内容都不熟悉,不了解不同方法的所有优点和缺点,而且我对此并不急。

1 个答案:

答案 0 :(得分:0)

决定使产品具有多态性,完全适合我的场景。无需担心为Product提供任何数据库表,它只是起作用。这是我遵循的指南:emberigniter.com