L'essentiel de Ruby on Rails

Appréhender les associations

TESTEZ LINKEDIN LEARNING GRATUITEMENT ET SANS ENGAGEMENT

Tester maintenant Afficher tous les abonnements
Associer les données consiste à les lier les unes aux autres. Votre formateur présente les différents types d'association, ce qui vous permettra de mieux aborder la mise en pratique.
07:35

Transcription

Vous avez surement déjà entendu parler du logiciel utilisé par la CIA ou autre service de renseignement permettant de relier une personne à un ensemble de données la concernant, non ? Ces logiciels ne sont guère différents d’un réseau social, comme Facebook, où chaque profil est lié à un ensemble de photos ou de données, de lieux visités, etc. Pour parvenir à leur fin, ces logiciels mettent en place ce qu’on appelle les associations entre les données. Le but de cette vidéo est de vous présenter comment lier des données les unes aux autres. C’est, je dirai, la base de toute application, qu’elle soit un réseau social ou un véritable logiciel de renseignement. Il existe différents types d’association et je vais toutes vous les présenter dans la suite de la vidéo en prenant une application de forum en guise d’exemple. Celle-ci est la plus classique. Il s’agit de l’association appartient à ou belongs_to en anglais. Elle permet de préciser qu’une donnée appartient à une autre donnée. Par exemple, si vous demandez l’adresse physique de vos utilisateurs sur votre forum, vous comprenez assez bien que cette adresse appartient à l’utilisateur. L’association belongs_to reflète cette appartenance quasi-physique. Afin de référencer cette appartenance au sein même de la base de données, il faut ajouter ce qu’on appelle une clé étrangère ou foreign key en anglais, c’est-à-dire un attribut référençant précisément la donnée liée. Et quoi de mieux que d’utiliser l’identifiant qui est unique pour chaque donnée ? Comme l’adresse appartient à l’utilisateur, c’est au sein de la table des adresses que l’on ajoute cette clé étrangère, ici : id_utilisateur. En Rails, il faut utiliser la méthode belongs_to et la mettre dans le modèle contenant la clé étrangère, donc ici : le modèle Adresse. Cette méthode prend en paramètre le nom du modèle associé sous forme de symbole. Il en ira de même pour toutes les méthodes des associations que nous verrons par la suite. Possède un ou une, ou has_one en anglais, peut être perçu comme la réciproque de belongs_to. Si une adresse appartient à l’utilisateur, alors l’utilisateur possède une adresse. Cela ne change en rien l’emplacement de la clé étrangère id_utilisateur qui se trouve toujours dans la table Adresse. En Rails, on utilise la méthode has_one. Grâce à ces méthodes spécifiques, Ruby on Railssaura exactement dans quelle table chercher la clé étrangère pour récupérer les données associées. Le Polymorphisme peut paraitre compliqué de prime abord, mais n’est en rien différent de belongs_to et has_one. Le Polymorphisme permet simplement à une même donnée d’être liée à plusieurs données sans avoir à multiplier une clé étrangère. Imaginez par exemple que vos utilisateurs ont un avatar, que les messages postés en ligne peuvent également avoir une image liée. Vous avez également des images de haute qualité en guise de page d’accueil de chacun de vos forums, etc., etc. Plutôt que de créer une clé étrangère par donnée dans la table image, vous pouvez utiliser le Polymorphisme Par exemple ici, id_data et type_data. id_data contiendra l’id de la donnée liée et type_data contiendra de quel type de donnée il s’agit. Par exemple, il pourra contenir utilisateur ou message selon si l’image est liée à un utilisateur ou à un message. En Rails, cela se traduit de la façon suivante : il faut créer une relation d’appartenance que nous pourrions caractériser de virtuelle puisque la donnée imageable n’existe pas réellement. Le modèle picture que nous souhaitons rendre polymorphique appartient à imageable. Notez que nous aurions pu mettre ici n’importe quel nom, attachable par exemple. Et ceci est aussi important que ce que nous avons mis dans la méthode belongs_to du modèle picture. Dans les deux autres modèles, on utilise la méthode has_one. et on leur fournit l’option has avec le même nom. Et ceci est très important que ce que nous avons mis dans la méthode belongs_to du modèle picture. Le polymorphisme fait toujours peur au début. Mais on finit par s’y faire, puis par ne plus pouvoir s’en passer. La relation suivante est utilisée pour lier une donnée à plusieurs autres données d’une même table. Il ne s’agit plus d’une association un-un comme avec l’adresse mais d’une association un-X. Un utilisateur peut en effet avoir plusieurs messages mais un message ne peut avoir qu’un auteur. Pour caractériser cela, on utilise l’association has_many. Notez le s à messages au niveau de la méthode has_many en Rails. Rappelez-vous ici que la clé étrangère se trouve dans la table appartenant à l’autre donnée. Un message appartient à un auteur, donc la table message contient la clé étrangère. Et en Rails, on utilise la méthode belongs_to pour caractériser cette appartenance dans le modèle message. Complexifions un peu la logique vue précédemment. Vous aimeriez maintenant que certains utilisateurs soient modérateurs mais uniquement sur certains forums. Il s’agit là d’une association X-X. Un forum peut être lié à plusieurs modérateurs et un modérateur peut modérer plusieurs forums. Il est possible d’utiliser l’association has_many_true pour ce type d’association. Comme vous pouvez le voir, il est nécessaire d’utiliser une troisième table, ici, Droits, qui se chargera de liée les données forum et users entre elles. La table Droit est appelées table de jointure puisqu’elle permet de faire la jonction entre forum et utilisateur. C’est elle qui contiendra les clés étrangères faisant référence aux données des deux autres tables. Cette association est très utile si vous devez en plus gérer les droits finement, par exemple, que vous avez des utilisateurs modérateurs et des super modérateurs avec davantage de droits. En Rails, voici la syntaxe. Le modèle Right présente deux belongs_to. En effet, deux clés étrangères impliquent nécessairement deux occurrences de la méthode belongs_to. Ensuite, on précise que nos modèles User possèdent plusieurs rights, grâce à la méthode has_many et qu’il possède également plusieurs forums à travers la table rights grâce à l’option through. De même, côté forum, un forum est lié à plusieurs droits d’accès et peut être modéré par plusieurs utilisateurs à travers ces droits d’accès. Il existe un raccourci pour l’association vue précédemment nommé has_and_belongs_to_many en anglais. Elle est particulièrement utile lorsque la table de jointure ne possède aucune autre information que les clés étrangères. En Rails, vous n’avez plus besoin du modèle de la table de jointure, plus besoin de préciser les belongs_to, has_many et les options through. Tout se fait grâce à la méthode has_and_belongs_to_many. La table de jointure aura cependant un nom spécifique correspondant au nom des modèles au pluriel mis dans l’ordre alphabétique, tout en minuscule et séparés par un underscore. Quelques dernières informations avant de vous lâcher dans le vaste et puissant monde des associations. Le Polymorphisme, sachez-le, fonctionne aussi avec une association has_many et pas seulement avec has_one. Par exemple, si vous souhaitez rattacher plusieurs images à un même message, le polymorphisme fonctionnera comme escompté. L’option through fonctionne aussi avec une association has_one et pas seulement has_many. Vous pouvez par exemple dire qu’un message est lié à l’adresse de son auteur à travers la table des utilisateurs. Et de cette manière, vous commencez à avoir votre logiciel espion. Comment savoir où mettre belongs_to Posez-vous simplement la question : qui appartient à qui ? Un message appartient-il à son auteur ? Sans aucun doute. Un auteur appartient-il à son message ? Là, cela sonne très étrange, trop même. C’est donc bien le modèle message qui doit avoir la méthode belongs_to. Comment choisir entre has_and_belongs_to_many et has_many_through ? C’est assez simple. Dès que la table de jointure doit contenir des informations supplémentaires comme les rôles modérateur, super modérateur dans la table rôle, alors il vous faudra utiliser has_many_through puisque has_and_belongs_to_many ne vous permet pas de travailler sur le modèle Rails. N’oubliez cependant pas de créer la table de jointure en base de données. Enfin, en guise de dernier point non moins important : sachez qu’un objet peut être associé à lui-même. Et vous pouvez même avoir des tables de jointure pour les deux données issues du même modèle. Je ne vous vois pas, mais je suis sûr que vous faites les gros yeux derrière votre écran. Aussi vais-je vous donner un exemple simple. Si vous deviez pouvoir lier des utilisateurs à leurs amis dans votre application, comment feriez-vous ? Et oui, avec une table de jointure liant le modèle user à lui-même. Cette vidéo, je l’espère vous aura donné un bon panorama sur toutes les associations qu’il est possible de mettre en place entre les données. Ces associations vous fourniront la base pour réaliser des applications en social complexe. Il ne vous reste plus qu’à pratiquer.

L'essentiel de Ruby on Rails

Concevez des applications web évolutives et intemporelles avec Ruby on Rails. Installez l’environnement, réalisez un projet de stack overflow, enrichissez-le, etc.

6h08 (85 vidéos)
Aucun commentaire n´est disponible actuellement

Votre formation est disponible en ligne avec option de téléchargement. Bonne nouvelle : vous ne devez pas choisir entre les deux. Dès que vous achetez une formation, vous disposez des deux options de consultation !

Le téléchargement vous permet de consulter la formation hors ligne et offre une interface plus conviviale. Si vous travaillez sur différents ordinateurs ou que vous ne voulez pas regarder la formation en une seule fois, connectez-vous sur cette page pour consulter en ligne les vidéos de la formation. Nous vous souhaitons un excellent apprentissage avec cette formation vidéo.

N'hésitez pas à nous contacter si vous avez des questions !