是否可以在ActiveRecord模型的范围方法中获取父ID?

时间:2013-11-21 20:43:16

标签: ruby-on-rails scopes

假设您有一个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

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

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,而?????是。这甚至可能吗?如果之前有人询问的话,我不知道要搜索什么来找到它。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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