【问题标题】:Rails 3.2 Active Record Join: Record not showing upRails 3.2 Active Record Join:记录未显示
【发布时间】:2012-04-25 03:38:41
【问题描述】:

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

在 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`

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

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

【问题讨论】:

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


    【解决方案1】:

    你没有做错什么,你使用了Coach模型的方法,所以你得到Coach模型/s。

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

    【讨论】:

    • 好吧,我就是这么想的,但是如果我这样做@coach = Coach.joins(:teams).select("coaches.first_name, coaches.last_name, teams.team_level") 并按照@coaches.team_level 进行操作,我会得到NoMethodError: undefined method 'team_level' for [#&lt;Coach first_name: "john", last_name: "doe"&gt;]:ActiveRecord::Relation,有什么想法吗?
    • 我不知道我没有做什么,但@coaches.team_level 现在神奇地起作用了。谢谢!
    【解决方案2】:

    其实挺好的。您要求一个 Coach 模型,然后加入 Team 模型。

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

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

    【讨论】:

    • 试过了,但我得到了NoMethodError: undefined method 'players' for [#&lt;Coach first_name: "john", last_name: "doe"&gt;]:ActiveRecord::Relation
    • 我不知道我不知道什么,但@coaches.team_level 现在神奇地起作用了。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2023-03-20
    • 2012-01-01
    • 2015-05-17
    • 2012-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多