Skip to content

Archives

  • janvier 2022
  • décembre 2021
  • novembre 2021
  • octobre 2021
  • septembre 2021

Categories

  • Aucune catégorie
Trend RepositoryArticles and guides
Articles

Comment une association has_many :through fonctionne en pratique

On janvier 3, 2022 by admin

Lorsque vous commencez à travailler avec Rails et ActiveRecord, il peut être difficile d’envelopper votre tête autour du concept des associations has_many :through, et plus important encore, comment elles peuvent être utilisées dans votre application Rails.

« disons que j’ai un groupe, un membre, des adhésions… comment puis-je ensuite réellement UTILISER cela dans mes modèles, contrôleurs et vues ? »

« J’utilise une relation has_many :through qui semble fonctionner. J’ai maintenant besoin d’un formulaire que je peux rendre pour que les utilisateurs rejoignent ou quittent le groupe. »

Pour commencer, vous devriez être raisonnablement sûr qu’une association has_many :through est un bon choix pour la conception de votre application. En supposant que vous le soyez, voici comment vous pouvez la mettre en pratique.

Disons que vous construisez une app avec des utilisateurs et des groupes, et que vous voulez construire un formulaire où un utilisateur donné peut rejoindre ou quitter n’importe quel groupe. Vous avez choisi d’associer vos utilisateurs et vos groupes par le biais de la table Membership.

Vos modèles sont structurés comme suit :

class User < ActiveRecord::Base has_many :memberships has_many :groups, through: :membershipsendclass Group < ActiveRecord::Base has_many :memberships has_many :users, through: :membershipsendclass Membership < ActiveRecord::Base belongs_to :user belongs_to :groupend

Je trouve toujours utile, avant de commencer à écrire mes contrôleurs ou mes vues, de réfléchir à ce que je veux accomplir, et d’utiliser la console Rails pour m’assurer que je suis sur la bonne voie. En d’autres termes, j’essaie d’arriver à un avec un objectif final, puis de travailler à rebours avec l’aide de la console Rails pour trouver ma solution.

Donc, étant donné que nous voulons rendre un formulaire qui permet à un utilisateur de rejoindre ou de quitter un groupe, nous devrions nous demander, « qu’est-ce que cela signifie d’avoir un utilisateur qui rejoint un groupe ? »

En ce qui concerne la base de données, cela signifie essentiellement que la table Membership aura une ligne avec les colonnes user_id et group_id correspondant à notre utilisateur et notre groupe donnés. Notre tâche consiste alors à orchestrer les choses de telle sorte que lorsque l’utilisateur clique sur « soumettre » dans son formulaire, la table Membership se retrouve avec une nouvelle ligne (ou plusieurs lignes) avec les valeurs correctes user_id et group_id.

Dans le formulaire/vue que nous rendons pour l’utilisateur, nous avons besoin d’un moyen par lequel l’utilisateur peut sélectionner les groupes qu’il veut rejoindre. Et dans le contrôleur, nous voulons extraire les choix que l’utilisateur a fait dans le formulaire et utiliser ces choix pour créer de nouvelles lignes dans la table Membership.

Premièrement, imaginez que vous ayez un user_id et un group_id, comment feriez-vous pour créer cette nouvelle ligne dans la table Adhésion ? ActiveRecord vous facilite la tâche. Ce que nous voulons faire, c’est, pour un enregistrement User donné, ajouter une ‘adhésion’ à celui-ci, de sorte que lorsque nous disons @user.groups, nous obtenons en retour une liste de groupes qui inclut le groupe que nous venons d’ajouter. Si vous faites ceci:

#assuming @user is your User [email protected] << Group.find(group_id)#if you have a list of group_ids(something like ), you can also do:@user.group_ids << group_ids

Ce morceau de code créera automatiquement une nouvelle ligne dans la table Membership avec les bons group_id et user_id. Et maintenant, chaque fois que vous utilisez @user.groups, vous obtiendrez en retour une liste des groupes que vous avez ajoutés. Pour plus de confiance, essayez ce qui précède dans votre console Rails.

Voyez le guide Rails ci-dessous pour plus de détails sur les méthodes qu’ActiveRecord vous fournit lorsque vous utilisez has_many :through.

Je vais supposer que vous avez un certain type d’authentification mis en place dans votre application, ce qui vous donne accès à la méthode current_user. Nous aurons besoin de cette méthode pour obtenir notre user_id, via un simple appel current_user.id. Une fois que vous avez votre utilisateur (avec quelque chose comme @user = User.find(current_user.id)), vous pouvez utiliser le code ci-dessus pour ajouter des groupes.

La question suivante est, comment écrire votre vue de sorte qu’elle transmette les valeurs group_id au contrôleur ?

La façon dont vous écrivez votre vue dépendra entièrement du flux que vous attendez de vos utilisateurs et d’autres facteurs dans votre application. Disons que vous décidez de fournir à votre utilisateur une liste de cases à cocher énumérant les groupes qu’il peut rejoindre ou quitter. Voici une façon simple d’accomplir cela :

<% Group.all.each do |group| %> <%= check_box_tag "user", group.id, @user.group_ids.include?(group.id) %> <%= group.name %> <br /><% end %>

L’utilisation de check_box_tag nécessite probablement quelques explications.

Le premier paramètre "user" indique à Rails de regrouper toutes les cases à cocher avec cet ID et de le passer au contrôleur comme un Array. Ce que cela signifie, c’est que dans votre contrôleur, vous pouvez faire params et obtenir un joli tableau Ruby de toutes les group_ids que l’utilisateur a choisies.

Le dernier paramètre garantit simplement que tout groupe auquel l’utilisateur appartient actuellement est coché lorsque le formulaire est rendu.

Ce qui précède devrait vous permettre d’utiliser has_many :through dans votre application Rails, mais en fonction de ce que votre application fait, je suis presque sûr que vous rencontrerez des problèmes qui ne sont pas couverts dans ce post. Donc, si vous êtes toujours coincé, consultez ce qui suit :

1) Consultez cet incroyable casting Rails qui vous emmène à travers toute la gamme d’utilisation de has_many :through. Si ce n’est pas déjà fait, je vous recommande vivement de vous procurer un compte sur RailsCasts.

2) Guide Rails ActiveRecord sur has_many :through

.

Laisser un commentaire Annuler la réponse

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Archives

  • janvier 2022
  • décembre 2021
  • novembre 2021
  • octobre 2021
  • septembre 2021

Méta

  • Connexion
  • Flux des publications
  • Flux des commentaires
  • Site de WordPress-FR
  • DeutschDeutsch
  • NederlandsNederlands
  • SvenskaSvenska
  • DanskDansk
  • EspañolEspañol
  • FrançaisFrançais
  • PortuguêsPortuguês
  • ItalianoItaliano
  • RomânăRomână
  • PolskiPolski
  • ČeštinaČeština
  • MagyarMagyar
  • SuomiSuomi
  • 日本語日本語

Copyright Trend Repository 2022 | Theme by ThemeinProgress | Proudly powered by WordPress