0

belongs_to假设您有一个包含两个团队的游戏模型。

class Game < ActiveRecord::Base

 belongs_to :home_team, class_name: "Team", foreign_key: "home_team_id"
 belongs_to :away_team, class_name: "Team", foreign_key: "away_team_id" 

end

一个团队可以使用 Team 类的这个方法找到它的游戏:

def games
  Games.where("home_team_id = ? OR away_team_id = ?", self.id, self.id)
end

然后@team.games.upcoming通过使用 Game 类的这个方法来使用:

def self.upcoming
  where("starts > ?", DateTime.now)
end

范围合并在一起,它工作得很好。

现在我正在尝试编写一个允许我这样做的方法:

@team.games.won

可以通过以下方式检查

@team.games.where("home_team_id = ? AND home_score > away_score OR away_team_id = ? AND away_score > home_score", ?????, ?????)

但我不知道如何在 ????? 所在的位置传递正确的团队 ID。这甚至可能吗?如果以前有人问过,我不知道要搜索什么才能找到它。

4

2 回答 2

1

在这种情况下,你会使用@team.id每个,就像@EricAndres 说的那样。

但是,您还需要在where子句中添加一些额外的括号以使其正常工作:

@team.games.where("(home_team_id = ? AND home_score > away_score) OR (away_team_id = ? AND away_score > home_score)", @team.id, @team.id)

更新

由于这是在Game模型上,那么该模型上的类方法如何调用won_by,它采用team

class Game < ActiveRecord::Base

  def self.won_by(team)
    where("(home_team_id = ? AND home_score > away_score) OR (away_team_id = ? AND away_score > home_score)", team.id, team.id)
  end

end
于 2013-11-21T20:50:26.333 回答
0

您需要@team.id为每个使用。

于 2013-11-21T20:47:47.457 回答