2

我的模型有一个多对多的关系,教练可以指导多个团队,一个团队可以有多个教练。(助理、主管等)

在 Rails 控制台中,当我运行时:

 @coach = Coach.joins(:teams).select("coaches.first_name, coaches.last_name, teams.team_level")

返回:

 => [#<Coach first_name: "john", last_name: "doe">] 

请注意,它不会返回teams.team_level,所以我不能@coach.team_level在我的视图中使用

当我这样做时.to_sql,它会返回:

=> "SELECT coaches.first_name, coaches.last_name, teams.team_level 
FROM `coaches` 
INNER JOIN `coach_teams` ON `coach_teams`.`coach_id` = `coaches`.`id` 
INNER JOIN `teams` ON `teams`.`id` = `coach_teams`.`team_id`

这是我所期望的......所以当我对我的数据库运行这个查询时,我得到了预期的字段。

我在这里做错了什么/我没有看到什么?感谢您查看这个!

4

2 回答 2

1

你没有做错任何事,你使用模型的方法,Coach所以你得到Coach模型/s。

由于您在团队中使用联接,因此team_level无需额外查询即可访问该值。

于 2012-04-25T11:54:50.157 回答
1

它实际上很好。您要求一个 Coach 模型,然后加入 Team 模型。

所以你实际上只需要@coach.teams.team_level访问团队级别。

选择不能改变你的模型的模式,它只能过滤从SQL返回的属性,这样你需要更少的往返和更少的数据传输,但结构是不变的。

于 2012-04-25T12:06:40.980 回答