我有一个User
模型,其基础type
列按预期工作,可以为子模型Teacher
和Student
实现单表继承,依此类推。
我有一个相应的Rails控制器,它调用User.find
来提取单个记录,而且STI的效果非常好。我正确地获得了正确类型的模型对象。
但type
字段本身被从我的数据库行中提取的值中排除。我希望将其包含在User.find
的结果中,以便我的数据类似于:
{ id: 3, name: "Jane Doe", type: "Student" },
{ id: 7, name: "Jane Clark", type: "Teacher" }
我明白为什么这不是默认值:大多数情况下,实际对象的类或类型是沟通您正在查看的User
类型的最佳方式。但就我的目的而言,类型信息在JSON翻译中丢失了,我宁愿以这种文字格式发送,因为我直接在消费者应用程序中使用它。
因此我的问题是:保持type
字段超出User.find
输出的原因是什么?我可以做些什么来覆盖它,理想情况是使type
看起来只是另一个普通的数据字段?
答案 0 :(得分:0)
这是现在可以使用的解决方法。
解决方法是在所有子模型的公共属性中按名称或任何其他特定于类型的信息存储文字类型。如,
def classProperty
'Student'
end
就我的目的而言,在调用控制器中检索此信息并使用普通的Ruby数据处理代码将其插入JSONized响应中是足够的。
然而,我仍然很好奇type
列未出现在我的模型中的机制以及如何在这样的情况下克服它。