我有3个型号:
class Server
has_many: games
end
class Game
belongs_to: server
has_many: players
end
class Player
belongs_to: game
end
Player
模型的属性valid
可能是真/假
现在我想获得一个属于特定games
的{{1}}列表,但在server
拉games
时我想拒绝所有server
其中仅将games
的{{1}}属性设置为players
。
任何valid
甚至一个true
属性game
为player
的{{1}}都应显示在结果中。
我可以通过以下方式完成:
valid
但这似乎非常低效。有没有更好的方法来实现它?
答案 0 :(得分:1)
您有两种选择:
选项1 使用INNER JOIN
:
games_with_invalid_players = Game.joins(:players).where(players: { valid: false })
# add .distinct at the end if you want to remove the duplicated game records
使用子选择选项2 :
game_ids = Player.where(valid: false).select(:game_id).distinct
games_with_invalid_players = Game.where(id: game_ids)