我已经设置了一个关联,我的实体被定义为
项目有很多团队,团队有很多用户
我有一个项目对象,我需要找到用户所属的团队。所以,如果我在控制台,我希望能够做到这一点:
project = Project.find(5)
project.team_id_for_user_id(7)
是否有一种简单的rails方式可以执行此操作,或者我是否需要遍历项目团队,然后遍历每个团队用户,直到找到用户的ID,然后返回当前的团队ID团队?
我的术语在这里可能不正确,这可能是我无法在其他地方找到答案的原因。
答案 0 :(得分:1)
这取决于Team
和User
之间的关联。
用户可以属于多个团队吗?如果是,如果团队链接到同一个项目怎么办?
选项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
记录(您需要进行一些自定义验证)。
但是,如果用户可以成为同一项目的不同团队的一部分,则该查询可以返回多个记录。