Sql 通过成员表为团队经理建模
我有以下连接团队和用户的Rails模型: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
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表来识别经理,以避免组合中出现另一种关系。