自引用,STI还是多态?

时间:2017-07-19 12:45:38

标签: ruby-on-rails postgresql activerecord data-modeling relationships

我有一个非常棘手的时间来模拟这个数据问题。

我的应用程序基本上是两种类型的用户对象和管理员之间的消息传递应用程序。每个数据都是相同的,但它们与消息的关系略有不同。

普通用户只有一个组,可以收到所有邮件。但是,管理员可以向不同组中的多个常规用户发送消息。

所以:
- 用户有一个组,并通过该组发送许多消息 - 管理员有很多组,并且通过组有很多用户

两种类型的用户必须存在于同一个表中,因为api规范要求用​​户ID提取组,而不管用户的类型如何。

我继续在多态性,STI和自我联接之间绕圈子,并且在我的生活中找不到正确的方法。

非常感谢任何建议!

编辑:

所以这是一个半功能的解决方案。有了这个,我可以从普通用户,反之亦然,组,以及所有消息获得管理员,但只能从reg_user获得。

从数据的角度来看,这仍然是错误的。普通用户将拥有多个组,但这些关系允许您提取属于用户的所有消息,而不管组是什么。因此可以从ui / controller控制/限制。

规范我还要求普通用户只能有一个线程,这不符合。

的usermodel

class User < ApplicationRecord
  has_many :groups
  has_many :admins, through: :reg_user, source: :user

  has_many :messages, through: :groups

  has_many :admins, through: :groups
  has_many :reg_user, foreign_key: :admin_id, class_name: 'Group'
end

0 个答案:

没有答案