【问题标题】:One Model association with two models一个模型与两个模型的关联
【发布时间】:2012-09-13 12:48:18
【问题描述】:

我有一个模型“Match”,它属于一个名为“Team”的模型。球队有很多比赛。它看起来像这样:

 $class Match < ActiveRecord::Base
 belongs_to :home_team, :class_name => "Team"
 belongs_to :away_team, :class_name => "Team"

 class Team < ActiveRecord::Base
 has_many :matches

在数据库中,我已经在“matches”表中正确设置了两个必需的字段 home_team_id 和 away_team_id。 我尝试了多种方法,但每当我在匹配控制器中执行此类操作时:

 @matches = Match.find(:all, :include => :team)
 # Or:
 @matches = Match.where('team.gender = ?', true)

我收到此错误:

Association named 'team' was not found; perhaps you misspelled it?

在我看来,该关​​联不起作用。有什么想法吗?

【问题讨论】:

  • match.home_team 不起作用?

标签: ruby-on-rails model associations


【解决方案1】:

您尚未添加任何 team 关联您已添加 home_teamaway_team 因此在您的代码中包括主队和客队。或创建团队关联

还有一件事,您如何知道哪个是主队和客队,应该有一个主队或客队需要一个外键,并在您的代码中添加foreign_key 以识别它们。

【讨论】:

  • 谢谢。当我在控制器中尝试此操作时:code @matches = Match.find(:all, :joins =&gt;[:home_team], :select =&gt;'team_name') 我得到了关联模型“团队”的名称。但是有可能在一个查询中同时获得 :home_team 和 away_team 吗?当我尝试时,我得到一个“字段列表中的列'team_name'不明确”-错误消息。
  • 我不理解您的查询,但根据我的猜测创建 2 个方法 home_team_name 和 away_team_name 或者您可以使用 delegate 这可能会有所帮助
  • 也许我想得太复杂了。我只想从球队表中获取客队和主队的名字以及比赛比分
  • 现在以这种方式进行查询,它可以工作。请。让我知道是否有更好的方法:Match.all(:joins =&gt; 'INNER JOIN teams AS first_team ON first_team.id = matches.home_team_id INNER JOIN teams AS second_team ON second_team.id = matches.away_team_id', :select =&gt; 'home_team_id, first_team.team_name AS first_team, home, away, matchdate, matchtime, second_team.team_name AS second_team, played'
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多