0

我想加入 2 张桌子、游戏和游戏日志。我这样做了:

game_joins =  Game.joins(:game_logs)

有效。但问题是我只想加入 player_id = 1 的地方(例如)。列 player_id 只能在表 game_logs 中找到。所以,当我这样做时:

game_joins =  Game.joins(:game_logs).where(:player_id => 1)

找不到列 player_id,因为

Game.joins(:game_logs)  

将导致 :

SELECT games.* FROM games
  INNER JOIN game_logs ON game_logs.game_id= game.id

所以,问题是我必须使用来自 table game_logs 的条件过滤 game_joins 的可能性是什么。我希望我解释得足够好。谢谢

4

2 回答 2

3
game_joins =  Game.joins(:game_logs).where(:game_logs => { :player_id => 1 })
于 2013-09-17T09:53:57.443 回答
1

在模型 GameLog 你需要

 belongs_to :game

在模型游戏中你需要

 has_many :game_logs

那么修改查询的一种方法是

 game_joins =  Game.joins("left join game_logs on games.id = game_logs.game_id").where("game_logs.player_id = 1").all

或者你可以使用

  game_joins =  Game.joins(:game_logs).where("game_logs.player_id = 1").all
于 2013-09-17T09:59:34.177 回答