Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 多对多用户和公司与多用户的关联';组';_Ruby On Rails_Activerecord_Rails Activerecord_Ruby On Rails 5 - Fatal编程技术网

Ruby on rails 多对多用户和公司与多用户的关联';组';

Ruby on rails 多对多用户和公司与多用户的关联';组';,ruby-on-rails,activerecord,rails-activerecord,ruby-on-rails-5,Ruby On Rails,Activerecord,Rails Activerecord,Ruby On Rails 5,我在这件事上有点困难。我的目标是建立这样的关系: 公司可以有许多用户(团队成员/员工) 用户可以是许多公司的一部分 公司可以有不同的用户组(即员工、所有者、顾问和高管) 用户可以是许多组的一部分(即用户A可以是公司1的员工,也可以是公司2的顾问) 基本上,我希望能够显示一家公司的概况,并显示其所有员工、所有者、顾问和高管。同样,我也在尝试通过用户是员工、所有者、顾问还是高管来搜索用户。此外,用户可能与许多不同的公司和许多不同的组相关联 我现在的方法/信念是建立以下Rails关系: 公司拥有

我在这件事上有点困难。我的目标是建立这样的关系:

  • 公司可以有许多用户(团队成员/员工)
  • 用户可以是许多公司的一部分
  • 公司可以有不同的用户组(即员工、所有者、顾问和高管
  • 用户可以是许多组的一部分(即用户A可以是公司1的员工,也可以是公司2的顾问)
基本上,我希望能够显示一家公司的概况,并显示其所有员工、所有者、顾问和高管。同样,我也在尝试通过用户是员工、所有者、顾问还是高管来搜索用户。此外,用户可能与许多不同的公司和许多不同的组相关联

我现在的方法/信念是建立以下Rails关系:

  • 公司拥有许多属于许多用户
  • 用户拥有许多属于许多公司
  • 公司通过:用户拥有一个员工团队
  • 公司通过:用户拥有自己的团队
  • 公司通过:用户
  • 公司通过:用户拥有一个执行团队
  • 员工团队拥有许多用户
  • 所有者团队拥有许多用户
  • AdvisorTeam拥有许多用户
  • ExecutiveTeam拥有许多用户
老实说,我不确定我是否把这件事复杂化了,这是不是一种有效的方法,或者这种方法是否有效。我是Rails的新手,希望您能提供指导/最佳实践。谢谢

  • 公司拥有并且属于许多用户
  • 用户拥有并且属于许多公司
  • 用户拥有且属于多个组
  • 集团属于公司
  • 组有多个用户,且多个用户属于多个用户
  • EmployeeTeam是组的一个子类
  • OwnerTeam是组的一个子类
  • AdvisorTeam是组的一个子类
  • ExecutiveTeam是Group的一个子类
  • 公司有一个员工团队
  • 公司拥有一个自己的团队
  • 公司有一个建议
  • 公司有一个执行团队
  • 公司通过EmployeeTeam、class User拥有众多员工
  • 公司通过OwnerTeam、class User拥有许多所有者
  • 公司通过AdvisorTeam、class User拥有许多顾问
  • 公司通过ExecutiveTeam、class User拥有许多高管
这将为您提供有关公司的功能:

company.users #all users
company.employees #all users with the group employee team
company.owners #all users with the group owner team
company.advisors #all users with the group advisor team
company.executives #all users with the group executive team
您将需要创建公司来创建他的组

您需要验证用户是否与与其公司无关的组关联

它还允许您为整个组编写代码,并为每个组类型编写特定代码

这也只有5个数据库表

  • 公司
  • 团体
  • 使用者
  • 公司和用户
  • 用户组

  • 在经典的数据设计方法中,我会考虑将结点表中的组信息与用户和公司联系起来。看看

    在第2.6章中,您将看到一个经典的多对多连接模型,其中“assemblies\u parts”作为连接表。在这里,您可以添加第三个关系。因此,您将得到一个“用户、公司和组”连接表。在那里,您可以自由分配三个域之间的关系

    限制可能会出现问题:您不希望用户在同一家公司的两个不同组中。这可以解决,例如,只使用“用户id”和“公司id”作为主键。这样,一个用户只能在每个公司工作一次


    [编辑:更正了上次关于限制的声明]

    用户可以在同一公司的两个不同组中吗?用户可以在公司中,但不能在组中吗?是的,是的。一个用户可以位于同一公司下的两个不同组中。此外,从技术上讲,用户可以在公司中,但不能在组中。不同公司的组类型是否相同?还是每个公司都有自己的集团类型?所有公司(员工、顾问、所有者、高管)的集团类型将保持不变。感谢您的快速回复!非常感谢。快速提问-当你说子类和使用ActiveRecord的单表继承是一样的吗?是的,我假设不同的组没有唯一的数据结构,但是会有唯一的功能。单表继承将适合T。这也是一个很好的解决方案。您能否解释一下,在给定
    公司
    和所需的
    的情况下,您将如何向
    用户
    发出请求。您只需在连接表上进行选择即可。我上一次使用rails是在一年前,所以我不想给你错误的语法,但它基本上是一个带有“where company id=want-c-id and group_id=want-g-id”的select子句。这种方法有一个小缺陷:它基本上说每个组都可以存在于任何公司中(这就是你所要求的)。如果在某些公司中只有不同的组可用,那么您可以在rails中检查有效性,或者通过具有两个连接表的更复杂的db模型来检查有效性。后者“更干净”(因为db检查数据完整性),但对性能有更高的影响(