Ruby on rails 用户和团队建模

Ruby on rails 用户和团队建模,ruby-on-rails,models,Ruby On Rails,Models,我一直在谷歌和这个网站上搜索一些方法,为我正在开发的应用程序构建一些模型 我计划拥有用户和团队。用户只能加入一个团队和一个团队。一个团队显然可以有很多用户。此外,我想在团队中添加一个“领导者”角色,该角色分配给创建团队的用户,但稍后可以传递给已经是该团队一部分的另一个用户 我看到了一些类似的模型示例,也看到了一些类似的示例: class User < ActiveRecord::Base has_one :team has_many :memberships end cl

我一直在谷歌和这个网站上搜索一些方法,为我正在开发的应用程序构建一些模型

我计划拥有用户和团队。用户只能加入一个团队和一个团队。一个团队显然可以有很多用户。此外,我想在团队中添加一个“领导者”角色,该角色分配给创建团队的用户,但稍后可以传递给已经是该团队一部分的另一个用户

我看到了一些类似的模型示例,也看到了一些类似的示例:

class User < ActiveRecord::Base
    has_one :team
    has_many :memberships
end

class Membership < ActiveRecord::Base
    belongs_to :user
    belongs_to :team
end

class Team < ActiveRecord::Base
    has_many :memberships
    has_many :users, :through => :memberships
end
class用户:会员资格
结束
为什么会员制模式是必要的?我已经在一些例子中看到了它,我不确定我是否完全遵循了它为什么在那里以及它在做什么的逻辑


另外,如果我在团队模型中做了类似“has_one:leader”的事情,并且有了leader模型,那么这会被认为是确定团队领导者的最佳实践吗?对于Leader来说,拥有一个完整的模型/表格似乎有点过分。

成员身份模型允许存在多对多关系。它充当联接表。它将允许用户属于多个团队,团队拥有多个用户

听起来你只是想要一对多

class User < ActiveRecord::Base
  belongs_to :team
end

class Team < ActiveRecord::Base
  has_many :users
end
class用户
我必须仔细检查这一部分,但是如果模型与您需要的名称不匹配,您可以使用其他参数来指定关联中的模型。所以团队可以有一个仅仅是用户模型的领导者

class Team < ActiveRecord::Base
  has_many :users
  has_one :leader, :class_name => "User", :foreign_key => "user_id"
end
class团队“User”,:foreign\u key=>“User\u id”
结束
关于关联的rails指南页面有一个很好的摘要,包括关于:class_名称和其他选项的部分

感谢您的回复和澄清。假设我确实希望允许一个用户属于多个团队,并且一个团队拥有多个用户。为什么我需要会员模式才能加入他们?在用户模型中,我可以不执行
has_many:teams
吗?要支持多对多关系,您需要一个连接/联接表。如果没有连接表,您将需要为用户所属的每个团队在用户上设置一个单独的team_id列。连接表允许您从关系的用户和团队双方进行一对多的操作。这个wikipedia链接很短,但描述了Rails中的基本思想。另一种选择是做has_,并且_属于_,很多来自双方,然后生成一个只有2个cols team_id,user_id,没有id列的连接表,这个表不是modelAh,好吧,这很有意义。因此,因为我希望用户一次只能属于一个团队,所以我不应该使用诸如成员资格之类的连接表。我想在
用户
模型中使用
:属于
,还是
:有一个
?似乎
:has_one
更有意义,但在您的示例中,您使用的
:bellings_to
:bellings_to和:has_one指定的一对一关系略有不同“所属对象”与“有一个”和“有多个”成对出现,它是关系的一方,其模型获取外键。在执行:has\u many from Team时,用户模型有:belient\u to,因此有外键列。由于User.team_id外键列只能保存一个值(属于一个团队),因此用户与团队之间是一对一的关系。这里有一篇古老但非常简洁的博客文章,其中有几个例子