0
votes

Comment afficher la valeur d'une variable de session dans Ruby / Rails?

D'abord, je ne sais pas si je déclare correctement une variable de session. De plus, je l'ai mis dans le contrôleur d'application, car je sais que cela fonctionnera. S'il y a un meilleur endroit pour mettre cela, alors laissez-moi savoir. Le résultat souhaité est un utilisateur sélectionne l'équipe qu'ils souhaitent que tout leur travail enregistre à la session. Ensuite, lorsque des objets sont enregistrés, ils utilisent la variable de session: Current_Team au lieu de: Current_User. Par défaut de la création, une équipe sera créée pour chaque nouvel utilisateur. C'est pourquoi je demande à la première équipe de chaque utilisateur. Pendant la session, je planifie que l'utilisateur de sélectionner l'équipe, ils fonctionnent / contribuent et la sélection persistent jusqu'à ce qu'ils le changent.

Application_Controller.rb P>

  has_many :team_members
  has_many :users, through: :team_members
  has_many :roles, through: :team_members
end


0 commentaires

3 Réponses :


1
votes

Une fois que vous avez session [: actuel_team] , vous pouvez l'enregistrer sur une variable dans n'importe quel contrôleur. Dites par exemple dans le contrôleur d'équipes, vous pouvez faire: @Current_team = session [: actuel_team] . Ensuite, dans la vue, vous pouvez utiliser @Current_Team .


3 commentaires

C'est définitivement une partie de l'endroit où j'allais mal. Je n'ai pas réalisé que je devais attribuer la valeur de la session Cookie à une variable.


Je vous ai donné un upvote, je reçois toujours une sorte de sortie de hasch à mon avis. # <Équipe: 0x00007FE58F47B360>


Qu'utilisez-vous à votre vue? Utilisez-vous <% = @Current_Team%>?



1
votes

Je suppose qu'un utilisateur peut faire partie de plusieurs équipes et (évidemment) une équipe possède de nombreux utilisateurs, votre relation serait approximativement comme celle-ci xxx

vous avez déjà dans la bonne direction mais j'ai fait peu changé en set_current_team et ajout la méthode accessor pour obtenir l'instance d'équipe actuelle. xxx

xx actuel_team méthode utilise la technique de mémoisation pour cache l'équipe actuelle lors de la demande de sorte que si vous appelez actuel_team plusieurs fois au cours d'une demande, il n'appellera plus que le DB pour obtenir l'enregistrement de l'équipe.

Je recommande vivement à Lire cet article 4 modèles de mémoisation simples dans Ruby .

Avis Helper_Method MACRO au-dessus du SET_CURrent_Team qui rend cette méthode d'assistance disponible sur votre vue aussi.

Suivant donc fonctionnera sur votre index xxx

aussi Comme tous les contrôleurs que tous les contrôleurs héritent de applicationController


2 commentaires

Jusqu'à présent, cela semble être la meilleure solution. Cependant, je reçois cela comme mon résultat pour

<% = actuel_team%> : # <équipe: 0x00007fe5846341a8> J'aurais également dû vous dire que j'ai aussi une table de jointure Team_Members, mais je ne pense pas que ce soit le problème.


C'est l'objet d'impression. Maintenant, si vous avez Nom dans le champ Table des équipes , vous pouvez imprimer le nom de l'équipe actuelle à l'aide de actuel_team.name . Comme sage, vous pouvez accéder à toutes les colonnes / attributs de l'objet d'équipe.



0
votes

mise à jour set_current_team méthode sur xxx

définir Session [: actuel_team] à l'utilisateur sélectionné de l'équipe d'équipe sélectionnée dans Controller # Action qui gère la demande

SET Session [: actuel_team] à nil lorsque la déconnexion de l'utilisateur


0 commentaires