为什么会有多态关系?

时间:2017-12-03 15:13:08

标签: ruby-on-rails database polymorphism associations

为什么会出现多态关系?如果数据库表未规范化,为什么会使用这种多态关系?这是为了减少数据库中的数据吗?我正在研究2天,但我没有找到一致的答案。你能帮帮我吗?

1 个答案:

答案 0 :(得分:1)

当关系可以同时应用于多个模型时,使用多态关系。

假设您有一个名为Profile的模型,其中包含TeacherStudent

的所有管理数据

与以下关系:

Student has_one :profile
Teacher has_one :profile
Profile belongs_to :student
Profile belongs_to :teacher

现在我们假设您选择Profile的第一条记录:

@p = Profile.first

你想得到这条记录的父母..这是一个问题因为你不知道你是否必须@p.student@p.teacher

然后多态关联可以证明是有用的,它向Profile添加了两个字段:父类和父类的id。它解决了知道它适用于哪个父母的问题。

你只需要调用一个中间抽象模型(假设Profileable在数据库中确实不存在作为一个表,但导致父母不知道它的类)