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