Ruby on rails Rails单表继承:如何重写写入类型字段的值
在我的系统中,我已经定义了STIRuby on rails Rails单表继承:如何重写写入类型字段的值,ruby-on-rails,ruby,ruby-on-rails-3,ruby-on-rails-3.2,single-table-inheritance,Ruby On Rails,Ruby,Ruby On Rails 3,Ruby On Rails 3.2,Single Table Inheritance,在我的系统中,我已经定义了STIDog继承自Animal,在animals表中有一个type列,其值为“Dog” 现在我想让SpecialDog从dog继承,只是在一些特殊情况下稍微修改行为。数据仍然是一样的。我需要通过SpecialDog运行的所有查询来返回数据库中类型为Dog的值 我的问题是,由于我有一个type列,rails在我的查询中添加了WHERE“animals”,“type”IN('SpecialDog'),因此我无法访问原始的Dog条目。因此,我希望以某种方式覆盖rails通过S
Dog
继承自Animal
,在animals
表中有一个type
列,其值为“Dog”
现在我想让SpecialDog
从dog继承,只是在一些特殊情况下稍微修改行为。数据仍然是一样的。我需要通过SpecialDog
运行的所有查询来返回数据库中类型为Dog
的值
我的问题是,由于我有一个type
列,rails在我的查询中添加了WHERE“animals”,“type”IN('SpecialDog')
,因此我无法访问原始的Dog
条目。因此,我希望以某种方式覆盖rails通过SpecialLog
访问数据库时使用的值,使其行为类似于Dog
有没有一种方法可以覆盖rails对type列使用的值?这样做感觉不太好,但是下面的代码就我所知应该可以工作
def self.sti_name
"Dog"
end
我的另一个建议是,如果可能的话,不要让
SpecialDog
继承Dog
。是否将任何狗保存为SpecialDog?或者所有的狗都是狗,但它们有时很特别?在数据库中它们总是“狗”不再工作???我有同样的例子,ruby 2.0.0,rails 3.0.10,使用它没有成功。