首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Rails可能存在的has_many多态关联问题

Rails可能存在的has_many多态关联问题
EN

Stack Overflow用户
提问于 2018-12-14 14:27:53
回答 1查看 23关注 0票数 0

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

用户

心理学家has_many教室

教师has_many教室

父母has_many子女

主任belongs_to学校

协调员belongs_to学校

我的用户模型如下所示:

代码语言:javascript
运行
复制
class User < ActiveRecord
   has_many :roles

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

角色模型是多态的:

代码语言:javascript
运行
复制
class Role < ApplicationRecord
  belongs_to :user
  belongs_to :roleable, polymorphic: true
end

其他型号是可滚动的。

我的问题如下,这似乎是不正确的,因为有些模型,如:主任,心理学家,教师,协调员和家长。它们只有关系,它们的数据库表除了created_at、updated_at之外没有任何其他列。

只使用关系创建这些模型并使其表没有数据可以吗?

EN

回答 1

Stack Overflow用户

发布于 2018-12-14 14:35:05

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

然后,您需要向users表中添加一个VARCHAR类型的VARCHAR列,并设置如下模型:

代码语言:javascript
运行
复制
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,您将能够创建类似于Role.create(user: teacher, name: 'bar')的角色。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53781595

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档