在我的应用程序中,我具有以下模型:
用户
心理学家有很多教室
老师有很多教室
父母有很多孩子
导演属于学校
协调员属于学校
我的用户模型如下:
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 外没有任何其他列。
可以只创建具有关系的模型,并且其表中没有数据吗?
答案 0 :(得分:0)
也许您打算使用单表继承,而不是多态关系。如果Psychologist
是User
,应该是这样。
然后,您需要向用户表中添加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}}。