在我的系统中,我已经定义了STI。 Dog
继承自Animal
,在animals
表格中有一个type
列,其值为"Dog"
。
现在我想让SpecialDog
继承自dog,只是为了在某些特殊情况下略微修改行为。数据仍然相同。我需要通过SpecialDog
运行的所有查询来返回数据库中具有Dog
类型的值。
我的问题是,由于我有type
列,因此rails会将WHERE "animals"."type" IN ('SpecialDog')
附加到我的查询中,因此无法访问原始的Dog
条目。所以我想要的是以某种方式覆盖rails在通过SpecialDog
访问数据库时使用的值,以表现得像Dog
。
有没有办法覆盖类型列使用的rails值?
答案 0 :(得分:9)
以这种方式做这种做法感觉不错,但下面的代码应该尽我所能。
def self.sti_name
"Dog"
end
我的另一个建议是,如果可能的话,不要SpecialDog
继承Dog
。