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