Rails单表继承:如何覆盖写入类型字段的值

时间:2013-04-04 09:47:00

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-3.2 single-table-inheritance

在我的系统中,我已经定义了STI。 Dog继承自Animal,在animals表格中有一个type列,其值为"Dog"

现在我想让SpecialDog继承自dog,只是为了在某些特殊情况下略微修改行为。数据仍然相同。我需要通过SpecialDog运行的所有查询来返回数据库中具有Dog类型的值。

我的问题是,由于我有type列,因此rails会将WHERE "animals"."type" IN ('SpecialDog')附加到我的查询中,因此无法访问原始的Dog条目。所以我想要的是以某种方式覆盖rails在通过SpecialDog访问数据库时使用的值,以表现得像Dog

有没有办法覆盖类型列使用的rails值?

1 个答案:

答案 0 :(得分:9)

以这种方式做这种做法感觉不错,但下面的代码应该尽我所能。

def self.sti_name
  "Dog"
end

我的另一个建议是,如果可能的话,不要SpecialDog继承Dog