没有继承共享表的最佳实践

时间:2017-04-28 16:27:55

标签: ruby-on-rails ruby inheritance activerecord

情况

我有四个Rails模型(A,B,C和D)都具有相同的属性(即表存储需求)。然而,模型D的行为与A,B和C完全不同,并且不应继承A,B和C共享的任何方法。现在我的工作继承层次结构如下:

继承层次

A< ActiveRecord :: Base

B<甲

C<甲

D< ActiveRecord :: Base

范围

A有一个default_scope:where(“(type为null或type!='D')”)

D有一个default_scope:where(type:'D')

问题

  1. 为什么上述场景中的D.new导致类型“D”?我认为这个步骤需要明确,因为D不会从A继承。另外,Rails如何选择A作为获取类型的默认模型:nil何时从ActiveRecord :: Base继承?

    < / LI>
  2. 这种方法有什么谬误我应该担心吗? *我认识到2是一个模糊而开放的结局。答案将仅基于1进行选择。

1 个答案:

答案 0 :(得分:0)

将属性移动到自己的模型(我不知道商业案例是什么,所以我们只需称它为Thing

A belongs to Thing
B belongs to Thing
C belongs to Thing
D belongs to Thing

这有助于您避免两件事经常导致Rails混淆:

  • 单表继承(STI):即。一旦类型,URL生成,表单
  • 之间存在差异,就会更难获得数据库级别约束
  • default_scope,当开发人员不了解时,通常会导致令人困惑的行为