Je pense que cette question s’enfonce dans les détails de Rails, mais voici :
J’essaie de comprendre comment afficher le ou les propriétaires de chaque groupe sur la page d’index des groupes (l’équivalent de cette page).
Mon point de départ est le modèle de groupe, ce qui m’indique que la caractéristique « propriétaires du groupe » n’est pas directement attachée à un groupe (contrairement, par exemple, à « full_name », qui fait partie du schéma du groupe, comme on peut le voir en bas de ce lien).
Il est donc clair que je ne peux pas appeler group.owners comme je peux appeler group.full_name. De même, je ne pense pas pouvoir récupérer ces informations via l’API en obtenant les détails d’un groupe, car « owners » ne semble pas être l’une des valeurs renvoyées.
Comment puis-je récupérer les propriétaires d’un groupe pour afficher ces informations ?
Je ne suis pas tout à fait certain de ce que vous essayez d’accomplir, mais je pense que vous cherchez GroupUser. Vous pouvez obtenir une liste des group_ids et des user_ids de leurs propriétaires en utilisant quelque chose comme :
Merci, c’est indéniablement un pas en avant. Mon objectif est d’afficher les propriétaires d’un groupe sous le nom du groupe sur la page d’index des groupes.
Vous devrez écrire un petit plugin pour sérialiser les bonnes informations. J’ai vu votre publication sur Marketplace. J’espère que quelqu’un s’en saisira !
J’ai assemblé quelque chose de manière très approximative comme preuve de concept, ce qui pourrait vous donner un point de départ pour comprendre par vous-même :
my-plugin/plugin.rb
# frozen_string_literal: true
# name: Group Test
# about: Group Test
# version: 0.1
# authors: Tester
# url: https://github.com/someone/something
enabled_site_setting :group_test_enabled
after_initialize do
add_to_serializer(:basic_group, :owners) do
GroupUser.where(group_id: object.id, owner: true).pluck("user_id")
end
end
Si vous assemblez tout cela et activez le plugin dans les paramètres de votre site, vous devriez voir les identifiants des propriétaires du groupe affichés sur la page des groupes.
Je ne pourrai pas vous aider au-delà de cela, donc bonne chance !
C’est extrêmement utile, merci. J’ai bien compris que vous ne pouviez pas fournir d’aide supplémentaire sur le code, mais j’espère pouvoir poser deux questions générales qui pourraient aussi être utiles à d’autres :
– Pouvez-vous brièvement expliquer pourquoi un sérialiseur est nécessaire ici ? (Je cherche à comprendre, non seulement pour ce cas, mais aussi pour d’autres personnalisations)
Et juste une petite question : pourrais-je réaliser cela directement dans mon tableau de bord ? (créer un plugin serait certes beaucoup plus organisé, mais comme je suis sur un plan hébergé, je ne peux pas importer directement de nouveaux plugins ; cela nécessite au moins quelques étapes supplémentaires)
Bien sûr Les données ne sont pas exposées par défaut dans le BasicGroupSerializer. Nous n’incluons que ce dont nous avons besoin.
C’est un peu un labyrinthe à suivre, mais la seule raison pour laquelle le composant groups-info dispose de ce qu’il a, c’est parce qu’il reçoit group de son modèle parent :
Et le modèle parent l’obtient du contrôleur :
Je crains que non. Sauf s’il existe une magie dont je ne serais pas au courant !
Bonjour @tshenry, j’essaie de mettre en place un plugin qui inclut du code similaire à celui que vous avez fourni ci-dessus pour exposer le propriétaire du groupe. J’ai une question à clarifier :
– le modèle pertinent ici est “group” (celui qui est référencé par groups-info)
– mais dans le sérialiseur, vous ne dites pas : add_to_serializer(:group, :owners)… Au lieu de référencer :group, vous référez à :basic_group, comme ceci :
add_to_serializer(:basic_group, :owners)
Pourquoi référencez-vous basic_group plutôt que group dans add_to_serializer ?
Comment avez-vous identifié que ce sérialiseur était le bon pour ce cas ?
Voici ce que j’ai pu comprendre : Dans le contrôleur des groupes, dans l’action index, il existe une fonction (ou méthode) render_json_dump qui inclut le BasicGroupSerializer dans l’appel serialize_data.
La page pertinente pour afficher les données des groupes est l’index des groupes, c’est donc l’action index du contrôleur qu’il faut examiner ici.
Est-ce ainsi que vous savez que le BasicGroupSerializer est le bon à référencer ici ?
Si tout cela est correct, le GroupShowSerializer serait-il utilisé pour l’affichage de la page de détail d’un groupe, car c’est le sérialiseur référencé dans l’action show du contrôleur ? (la page contenant les détails d’un groupe — bien qu’il ne semble pas y avoir de vue “groups.show”).
Et dans le cas où aucun sérialiseur n’est référencé, comme dans l’action new du contrôleur, que se passe-t-il alors ?
Une autre chose à noter, qui est vraiment déroutante et qui m’a beaucoup confus au début : Rails est un framework et il utilise des conventions de nommage très strictes pour faire fonctionner sa magie. Ce n’est pas immédiatement évident, lorsque vous n’y êtes pas habitué, de voir comment tout est connecté, mais lorsque vous prenez en compte les conventions de nommage, cela commence à devenir plus clair.
Merci pour cette référence, c’est très utile. Je trouve quand même le fichier des routes un peu confus. Par exemple, autant que je puisse voir, il n’y a pas d’action de contrôleur groups#index référencée, même si c’est clairement l’action pertinente pour la page principale du groupe. Cependant, je vois l’action groups#index lorsque j’exécute :
% rails routes, ce qui est aussi, je suppose, un moyen utile de voir comment une page donnée correspond à un contrôleur.