在嵌套中查找中间对象有很多

时间:2014-03-30 00:43:10

标签: ruby-on-rails

我已经设置了一个关联,我的实体被定义为

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

我有一个项目对象,我需要找到用户所属的团队。所以,如果我在控制台,我希望能够做到这一点:

project = Project.find(5)
project.team_id_for_user_id(7)

是否有一种简单的rails方式可以执行此操作,或者我是否需要遍历项目团队,然后遍历每个团队用户,直到找到用户的ID,然后返回当前的团队ID团队?

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

1 个答案:

答案 0 :(得分:1)

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

选项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_id: @project.id)将返回单个Team记录(您需要进行一些自定义验证)。

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