has_many多态关联的Rails可能出现的问题

时间:2018-12-14 14:27:54

标签: ruby-on-rails polymorphic-associations

在我的应用程序中,我具有以下模型:

用户

心理学家有很多教室

老师有很多教室

父母有很多孩子

导演属于学校

协调员属于学校

我的用户模型如下:

class User < ActiveRecord
   has_many :roles

   def has_role? role_name
     self.roles.where(role_type: role_name).any?
   end
end

角色模型是多态的:

class Role < ApplicationRecord
  belongs_to :user
  belongs_to :roleable, polymorphic: true
end

其他型号都可以卷起。

以下是我的问题,看来这是不正确的,因为某些模型如下:主任,心理学家,教师,协调员和父母。它们仅具有关系,并且其数据库表除 created_at updated_at 外没有任何其他列。

可以只创建具有关系的模型,并且其表中没有数据吗?

1 个答案:

答案 0 :(得分:0)

也许您打算使用单表继承,而不是多态关系。如果PsychologistUser,应该是这样。

然后,您需要向用户表中添加type类型的VARCHAR列,并设置模型,例如:

class User < ApplicationRecord
  has_many :roles

  def has_role? role_name
    self.roles.where(role_type: role_name).any?
  end
end

class Psychologist < User
  # no need to set up roles
end

class Teacher < User
  # no need to set up roles
end

class Role < ApplicationRecord
  belongs_to :user
  # no polymorphic
end

type列将填充实际类的名称,例如"Teacher"等。

由于Teacher的一个实例也是User的一个实例,因此它将具有teacher.has_role?('foo')teacher.roles,您将能够创建一个像{{ 1}}。