关于我的模特/桌子? STI?多态?

时间:2014-08-19 00:13:44

标签: ruby-on-rails activerecord polymorphism models sti

我目前有三种模式:商业,慈善和组织。企业和慈善机构都是两种类型的组织,因为它们共享许多类似的属性(例如地址,小时,网站等),但它们各自具有自己的独特属性。我应该如何最好地处理Active Record中模型的创建?使用STI还是多态?或者我是否应该将每个模型分解为具有重复信息的模型并摆脱组织模型?

1 个答案:

答案 0 :(得分:0)

您可以同时使用两者,因此不一定是两种情况。然而,最重要的是,您将如何构建表格及其周围的逻辑,这取决于您将如何查询数据,以及这些元素如何相互关联。

上面没有足够的信息可以为您提供明确的使用方法。但是,如果看完后:

  1. Rails Guides
  2. How and When to Use STI
  3. ......解决方案不明确,这里有一些简单的规则:

    1. 如果您使用的对象类型大多具有相同的属性但附加了不同的业务逻辑(即写入其Model类的行为),那么STI是一个很好的基线想法,但是
    2. 如果它们也具有相同的逻辑,那么将它们创建为具有“type”标志的单个类(但不是属性type可能是有意义的,因为它仅适用于STI)
    3. 就多态性而言,似乎这些模型都非常相似且可互换 - 多态性对于将不同的东西(例如注释和照片)与另一个模型(例如FB帖子)相关联更有用。在这种情况下,使用单个表或STI并基于父表进行相关可能更有意义。