情况
我有四个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')
问题的
为什么上述场景中的D.new导致类型“D”?我认为这个步骤需要明确,因为D不会从A继承。另外,Rails如何选择A作为获取类型的默认模型:nil何时从ActiveRecord :: Base继承?
< / LI>这种方法有什么谬误我应该担心吗? *我认识到2是一个模糊而开放的结局。答案将仅基于1进行选择。
答案 0 :(得分:0)
将属性移动到自己的模型(我不知道商业案例是什么,所以我们只需称它为Thing
)
A belongs to Thing
B belongs to Thing
C belongs to Thing
D belongs to Thing
这有助于您避免两件事经常导致Rails混淆:
default_scope
,当开发人员不了解时,通常会导致令人困惑的行为