Dans le contrôleur:
@games = Game.all(:include => :player)
De l'avis:
<% @games.each do |game| %>
<%= game.player.name %>
<% end %>
Votre modèle de données semble étrange pour moi. Pour le même problème mon modèle de données pourrait ressembler à ceci:
class Game < ActiveRecord::Base
has_many :game_players
has_many :players, :through => :game_players
end
class GamePlayer < ActiveRecord::Base
belongs_to :game
belongs_to :player
end
class Player < ActiveRecord::Base
has_many :game_players
has_many :games, :through => :game_players
end
Maintenant, dans le contrôleur, j'interrogerait les jeux:
@games = Game.all(:include => :players)
Dans la vue:
<%@games.each do |game| %>
<% games.players.each do |player| %>
<%= player.name %>
<%end%>
<%end%>
Modifier 1
Si vous avez un concept d'équipe alors, je vais ntroduce le modèle d'équipe:
class Player < ActiveRecord::Base
has_many :team_players
has_many :teams, :through => :team_players
end
class TeamPlayer < ActiveRecord::Base
belongs_to :player
belongs_to :team
end
class Team < ActiveRecord::Base
has_many :team_players
has_many :players, :through => :team_players
belongs_to :game
# attributes name, score team size constraints etc.
end
class Game
has_many :teams
has_many :players, :through => :teams.
end
Ajout d'un nouveau jeu:
@game = Game.new
@team_a = @game.teams.build(:name => "Foo")
@team_a.players << Player.find_all_by_name(["John", "Grace"])
@team_b = @game.teams.build((:name => "Bar")
@team_b.players << Player.find_all_by_name(["Kelly", "Yuvan"])
@game.save
Alors que l'interrogation des jeux dans votre contrôleur:
@games = Game.all(:include => [{:teams => :players}])
À votre avis:
<%@games.each do |game| %>
<% games.teams.each do |team| %>
<% team.players.each do |team| %>
<%= player.name %>
<%end%>
<%end%>
<%end%>
Merci pour avoir pris le temps de regarder dans mon modèle de données. Comment contraindriez-vous les joueurs à certaines positions dans le jeu? Si c'est un match de tennis en double, vous avez deux joueurs dans chaque équipe qui s'affrontent. Le jeu aurait un score pour chaque équipe. – Etienne
Mis à jour la réponse, jetez un oeil. –
C'est génial. Une dernière question liée à Rails. Considérant que j'ai fait fausse route avec mon modèle et les migrations associées, comment refait-on quelque chose? Est-ce que je crée simplement une nouvelle migration qui corrige le schéma pour supporter de nouveaux modèles ou est-ce que je supprime des migrations existantes et en crée de nouvelles? – Etienne