-
Notifications
You must be signed in to change notification settings - Fork 4
3. Fin (pour l'instant !)
Remarque : vous devriez être embêtés s'il y a une association n,n. Nous allons voir ça dans deux paragraphes.
Retournez au chapitre précédent, et suivez le même cheminement pour les associations entre les personnes et les voyages (attention, c'est une association *-*)
Grand classique de la base de données, l'association "n,n" suit une convention très simple en Rails :
- une table de jointure se trouve entre les deux tables associées,
- elle ne contient que les clés étrangères de chaque table participante,
- le nom de la table de jointure est l'association par un tiret bas (_) des deux noms des deux tables participantes, dans l'ordre alphabétique,
- une table d'association simple, juste pour faire du "n,n" n'a pas de clé "id".
Créez l'association entre Personne et Voyage.
Il vous faut donc un script de migration pour créer la table.
Modifiez vos modèles Personne et Voyage pour qu'ils se connaissent
Vérifiez que ça fonctionne en ajoutant des voyages à une personne, et des personnes à un voyage.
Chaque "bout" d'association se manipule simplement comme un tableau.
# Les voyages de la première personne
Personne.first.voyages
# Le dernier voyage de la première personne
Personne.first.voyages.last
# Les personnes qui ont participé au premier voyage de la dernière personne
Personne.last.voyages.first.personnes
On peut aussi accéder aux identifiants des objets liés ; c'est utile pour les générer des select html multiples.
# La liste des ids des voyages d'une personne est dans :
Personne.last.voyage_ids
# La liste des ids des personnes qui font un voyage est dans :
Voyage.first.personne_ids
Utilisez les deux dernières lignes de code ci-dessus avec le helper collection_select pour permettre de choisir les participants à un voyage ou les voyages que fait une personne.