Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.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
Sql 通过成员表为团队经理建模_Sql_Ruby On Rails - Fatal编程技术网

Sql 通过成员表为团队经理建模

Sql 通过成员表为团队经理建模,sql,ruby-on-rails,Sql,Ruby On Rails,我有以下连接团队和用户的Rails模型: class User < ActiveRecord::Base has_many :memberships has_many :teams, through: :memberships end class Team < ActiveRecord::Base has_many :memberships has_many :users end class Membership < ActiveRecord::Base

我有以下连接团队和用户的Rails模型:

class User < ActiveRecord::Base
  has_many :memberships
  has_many :teams, through: :memberships
end

class Team < ActiveRecord::Base
  has_many :memberships
  has_many :users
end

class Membership < ActiveRecord::Base
  belongs_to :team
  belongs_to :user
end
class用户
我想通过现有的memberships表实现一个团队管理器。 在teams表中使用外键是否更好,如下所示:

class Team < ActiveRecord::Base
  belongs_to :manager_membership, class_name: 'Membership'
  has_one :manager, through: :manager_membership, source: :user
  # ...
end
class Team < ActiveRecord::Base
  has_one :manager_membership, -> where { manager: true }, class_name: 'Membership'
  has_one :manager, through: :manager_membership, source: :user
  # ...
end
class团队
或者最好在成员资格上有一个额外的列(具有唯一索引),如下所示:

class Team < ActiveRecord::Base
  belongs_to :manager_membership, class_name: 'Membership'
  has_one :manager, through: :manager_membership, source: :user
  # ...
end
class Team < ActiveRecord::Base
  has_one :manager_membership, -> where { manager: true }, class_name: 'Membership'
  has_one :manager, through: :manager_membership, source: :user
  # ...
end
class团队其中{manager:true},类名:'membership'
拥有一名:经理,通过::经理成员,来源::用户
# ...
结束

我想知道外键从团队到成员再到成员的双向传递是否很奇怪?或者,这两种方式都没有多大区别?

根据评论,您应该能够为您的用户和管理者使用a。这意味着您可以在两种模型上使用相同的
成员关系

class User < ActiveRecord::Base
  has_many :memberships
  has_many :teams, through: :memberships
end

class Manager < User
  # your code
end

您还必须进行相应的迁移来实例化
TeamsManagers

根据评论,您应该能够为您的用户和经理使用。这意味着您可以在两种模型上使用相同的
成员关系

class User < ActiveRecord::Base
  has_many :memberships
  has_many :teams, through: :memberships
end

class Manager < User
  # your code
end

您还必须进行相应的迁移来实例化
TeamsManagers

一个
团队
只能有一个
经理
用户
(经理)可以有多个
团队
,对吗?如果是,那么团队应该有一个
manager\u id
指的是一个用户团队的经理是否始终是该团队的成员?是的,一个团队只能有一个经理(一个用户可以管理多个团队)。是的,经理将始终是一名成员。
团队
只能有一名
经理
,而
用户
(经理)可以有许多
团队
,对吗?如果是,那么团队应该有一个
manager\u id
指的是一个用户团队的经理是否始终是该团队的成员?是的,一个团队只能有一个经理(一个用户可以管理多个团队)。是的,经理将永远是一名成员。团队模型方最终会如何?感谢您的洞察力,但我正试图继续使用成员资格表来识别经理,以避免在组合中出现另一种关系。团队模型方最终会如何?感谢您的洞察力,但我试图继续使用memberships表来识别经理,以避免组合中出现另一种关系。