0

我有以下几点,每个玩家有很多游戏,每个游戏都有很多玩家,玩家可以选择去或不去游戏。

Game
 has_many :shows
 has_many :players, :through => :shows

Player
 has_many :shows
 has_many :games, :through => :shows

Show Migration
  t.references :game
  t.references :player
  t.boolean :going, :default => false

如果玩家决定参加比赛,我想要做的就是设置为真,那么最好的方法是什么?

4

1 回答 1

1

假设您知道玩家的 id ( player_id) 和特定游戏的 id ( game_id),您可以执行以下操作:

Show.where('player_id = ? and game_id = ?', player_id, game_id).first.update_attributes(:going => true)

这更冗长,但也可能:

player = Player.find(player_id)
show = player.shows.find_by_game_id(game_id)
show.update_attributes(:going => true)

如果你想迭代游戏,你可以这样做:

player = Player.find(id_of_player)

player.shows.each do |show|
  if show.game == ... # condition that decides whether player's going or not
    show.update_attributes(:going => true) 
  end
end
于 2013-04-10T00:16:49.497 回答