使用类表继承是 受到推崇的 子类引用超类,而不是相反。通常在 Rails 中,多态关联以相反的方向工作——超类指的是子类。

受到推崇的

vehicle
  .id

car
  .vehicle_id # PK instead of using id (identity column)

boat
  .vehicle_id

典型的 Rails 多态关联

vehicle
  .id
  .subclass_type
  .subclass_id

car
  .id

boat
  .id

我喜欢推荐的方法,因为我可以消除不匹配的密钥。也就是说,给定的汽车及其车辆超级共享相同的 id。

在我的特定实例中,我可能会支持多重继承,因此,例如,我可以拥有一辆混合车船车辆。

问题:

  • 您将如何设置 ActiveRecord 关联...

    • 如果一辆车只能有一个子类呢?

    • 如果一辆车可以有很多子类?(我在这里看到的问题是,通过不指定特定的 subclass_type,关联如何知道要命中哪个表。我猜他们不会,所以必须打所有可能的桌子。所以也许交叉表在这里会有所帮助。)

  • 这是与 ActiveRecord 一起使用的良好设计模式吗?还是说它与 Rails 的对抗程度足以让我们应该避免使用它?

有帮助吗?

解决方案

我选择了最简单的解决方案:使用多态关联(如第二个块所示)。它将具有更好的性能并且更易于维护。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top