拒绝关联具有特定属性值的记录

时间:2018-03-28 15:07:39

标签: ruby-on-rails ruby ruby-on-rails-4 activerecord

我有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}}列表,但在servergames时我想拒绝所有server其中games的{​​{1}}属性设置为players

任何valid甚至一个true属性gameplayer的{​​{1}}都应显示在结果中。

我可以通过以下方式完成:

valid

但这似乎非常低效。有没有更好的方法来实现它?

1 个答案:

答案 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)