Rails 3.2 Active Record Join:记录未显示

时间:2012-04-25 03:38:41

标签: sql ruby-on-rails activerecord join ruby-on-rails-3.2

我的模型有多对多的关系,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`

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

我在这里做错了什么/我没看到什么?感谢您对此进行调查!

2 个答案:

答案 0 :(得分:1)

你没有做错任何事,你使用Coach模型的方法,因此你得到Coach模型。

由于您在团队中使用加入,因此无需其他查询即可访问team_level值。

答案 1 :(得分:1)

实际上很好。您要求使用Coach模型,您可以加入团队模型。

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

select不能改变你的modell的架构,它只能过滤掉从SQL返回的属性,这样你就需要更少的往返和更少的数据传输,但结构不变。