【发布时间】:2016-02-02 13:52:07
【问题描述】:
我已经尝试解决这个问题一段时间了。看了here,但这不是我需要的。
我有三个模型:User、Group、GroupMembership。用户可以是教师和学生,因此用户通过 UserRoles 表具有不同的角色。小组可以有多名教师。我想要的是这样的:
Role.rb
has_and_belongs_to_many :users #this works fine
User.rb
has_and_belongs_to_many :roles # this works fine
has_many :group_memberships
has_many :groups, through: :group_memberships
has_many :teachers, through: :group_memberships
has_many :students, through: :group_memberships
Group.rb
has_many :students, through: :group_memberships
has_many :teachers, through: :group_memberships
GroupMembership.rb
belongs_to :student
belongs_to :teacher
belongs_to :group
具有角色的用户工作正常,用户的不同角色没有问题。问题在于组成员身份。以上只是我想要做的事情,但在某些情况下,我需要提供源或类名,我不确定具体要做什么。我应该创建什么样的迁移?
【问题讨论】:
-
你怎么知道用户是老师还是学生?有没有设置用户类型的字段?
-
@AnezioCampos 是的,有一个表 Roles 和一个连接表 UserRoles
-
@Dan 将
type字段添加到User,并从User继承两个给学生和老师。 -
@МалъСкрылевъ 他正在使用角色来区分不同类型的用户。恕我直言,这是比 STI 更好的选择,因为 STI 无法加入。
-
@RichPeck 因为 STI 依赖于数据库中关于要加载哪些类以及它们有哪些关系的信息,因此很难创建有效的连接 VS 正常情况。并非不可能 - 但让一切都变得非常有趣。它与使用多态关系时几乎相同。
标签: ruby-on-rails ruby-on-rails-4 activerecord associations has-and-belongs-to-many