我的模型有多对多的关系,Coach可以指导很多团队,一个团队可以有多个教练。(助理,负责人等)
在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`
我期望的是......所以当我针对我的数据库运行此查询时,我得到了预期的字段。
我在这里做错了什么/我没看到什么?感谢您对此进行调查!
答案 0 :(得分:1)
你没有做错任何事,你使用Coach
模型的方法,因此你得到Coach
模型。
由于您在团队中使用加入,因此无需其他查询即可访问team_level
值。
答案 1 :(得分:1)
实际上很好。您要求使用Coach模型,您可以加入团队模型。
所以你实际上只需要@coach.teams.team_level
来访问团队级别。
select不能改变你的modell的架构,它只能过滤掉从SQL返回的属性,这样你就需要更少的往返和更少的数据传输,但结构不变。