Ruby on rails 在嵌套中查找中间对象有许多

Ruby on rails 在嵌套中查找中间对象有许多,ruby-on-rails,Ruby On Rails,我已经建立了一个关联,其中我的实体被定义为 项目有很多团队,团队有很多用户 我有一个项目对象,我需要找到用户属于哪个团队。因此,如果我在控制台中,我希望能够执行以下操作: project = Project.find(5) project.team_id_for_user_id(7) 有没有一种简单的rails方法可以做到这一点,或者我需要遍历项目团队,然后遍历每个团队用户,直到找到用户ID,然后返回当前团队的团队ID 我的术语在这里可能不正确,这可能是我无法在其他地方找到答案的原因。这取决于

我已经建立了一个关联,其中我的实体被定义为

项目有很多团队,团队有很多用户

我有一个项目对象,我需要找到用户属于哪个团队。因此,如果我在控制台中,我希望能够执行以下操作:

project = Project.find(5)
project.team_id_for_user_id(7)
有没有一种简单的rails方法可以做到这一点,或者我需要遍历项目团队,然后遍历每个团队用户,直到找到用户ID,然后返回当前团队的团队ID


我的术语在这里可能不正确,这可能是我无法在其他地方找到答案的原因。

这取决于
团队
用户
之间的关联。 一个用户可以属于多个团队吗?如果是,如果团队链接到同一个项目怎么办

选项1,简单:

class Project
  has_many :teams
end

class Team
  belongs_to :project
  has_many :users
end

class User
  belongs_to :team
end

user_id = 7
@team = User.find_by(id: user_id).team
选项2,更复杂:

class Project
  has_many :teams
end

class Team
  belongs_to :project
  has_and_belongs_to_many :users
end

class User
  has_and_belongs_to_many :teams
end


@project = Project.find_by(id: 5)
user_id = 7
@user = User.find_by(id: user_id)
@team = @user.teams.where(project_id: @project.id).first
在最后一行,查询
@user.teams.where(project\u id:@project.id)
将返回单个
团队
记录,如果用户是每个项目的单个团队的一部分(您需要进行一些自定义验证)


但是,如果用户可以是同一项目的不同团队的一部分,则该查询可以返回多条记录。

Ok。对你的第二个更复杂的例子就是我想要的。一个用户只能属于一个团队,因此只能属于一个项目,所以这将非常有效。谢谢不客气。然而,如果正如你所说,“一个用户只能属于一个团队,因此只能属于一个项目”,那么你最好使用我在第一个示例中概述的关联。在你的第一个示例之后,我意识到这比我在问题中表达的要复杂。我使用一种称为团队成员的加入模式(有很多,通过)。团队属于项目,通过团队成员身份拥有许多成员。这个项目有很多团队。用户通过团队成员拥有多个团队。用户也有许多通过团队参与的项目,源项目。用户也有很多项目,因为用户自己的项目,然而,这对于我们在这里讨论的关联部分来说是无关紧要的。不管怎样,您的第二个示例非常有效!;-)