背景
我有一个 rails 3 应用程序,它有一个以A
对应表命名的模型as
。现在我需要一个新模型B
,它的工作原理与此一模一样,A
但有一些其他的关联和方法(除了 中的那些A
)。
问题
我决定使用 STI(单表继承)。我知道我可以做类似A < BaseModel
andB < BaseModel
的事情,但是已经有很多代码假设一个名为的表as
,它需要太多的工作。
所以我正在尝试做B < A
,哪里A
不是抽象的。我将该type
列添加到as
. 现在模型B
完美运行,但是模型A
对继承一无所知并且完全忽略了该type
列,所以当我这样做时,A.create!
它说该列type
不能为空。也A.all
返回B
行。
我试过的
A
使用列的默认值type
。这有效,但只能解决部分问题A
在模型中使用默认范围。这种方法的问题是它过滤掉B
了两个模型的所有行
问题
- 我如何
B < A
在 Rails 中完成,没有一个模型是抽象的? - 还有其他不错的选择吗?