Afin de comprendre comment est codé le jeu (bientôt je mettrais les fichiers sources quelquepart), il faut comprendre comment je l'ai organisé :
Les joueurs inscrits peuvent jouer contre d'autres joueurs, et faire plusieurs parties à la fois, une partie à l'avenir pourra avoir plus de deux joueurs, il faut séparer les objets "joueur_inscrit", "partie_de_jeu" et "participant_a_une_partie".
Les noms des tables sont donc :
joueursconfrontationsparticipantsJ'ai évidemment créé les modèles de classes correspondantes.
Pour relier ces tables là, j'utilise les déclarations has_many, belongs_to et has_and_belongs_to_many de la sorte :
- Un joueur a plusieurs participants.
- Une confrontation a plusieurs participants.
- Une confrontation a plusieurs joueurs.
- Un joueur a plusieurs participants.
1 et 2 sont deux dépendances 1 vers n (has_many).
3 et 4 forment une dépendance n vers n (has_and_belongs_to_many).
class Confrontation < ActiveRecord::Base has_and_belongs_to_many :joueurs has_many :participantsendclass Joueur < ActiveRecord::Base has_and_belongs_to_many :confrontations has_many :participantsendclass Participant < ActiveRecord::Base belongs_to :confrontation belongs_to :joueurendDu côté mysql, j'ai opté pour un fichier create.sql (méthode utilisée dans le livre ruby on rails).
Les lignes intéressantes sont :
create table participants (
id
int not null auto_increment,
joueur_id
int not null,
confrontation_id
int not null,
constraint fk_confrontation foreign key (
confrontation_id) references confrontations(id),
constraint fk_joueur foreign key (
joueur_id) references joueurs(id),
primary key (id)
);
où l'on voit apparaître les lignes "joueur_id" et "confrontation_id"
Ainsi que la table de jointure permettant à rails de faire la passerelle entre les joueurs et les confrontation :
create table confrontations_joueurs (
confrontation_id
int not null,
joueur_id
int not null,
constraint fk_cp_confrontation foreign key (
confrontation_id) references confrontations(id),
constraint fk_cp_joueur foreign key (
joueur_id) references joueurs(id),
);