Creo que esta pregunta se adentra en los detalles de Rails, pero allá voy:
Estoy tratando de averiguar cómo mostrar al propietario o propietarios de cada grupo en la página de índice de grupos (equivalente a esta página).
Mi punto de partida es el modelo de grupo, lo que me sugiere que la característica de propietarios del grupo no está directamente adjunta a un grupo (a diferencia, por ejemplo, de “full_name”, que puedo ver que forma parte del esquema de grupo al final de ese enlace).
Por lo tanto, está claro que no puedo llamar a group.owners como puedo llamar a group.full_name. De manera similar, creo que tampoco puedo obtener la información de vuelta a través de la API al recuperar datos sobre un grupo, porque “owners” no parece ser uno de los valores devueltos.
¿Cómo podría obtener los propietarios de un grupo para mostrar esa información?
No tengo muy claro qué estás intentando lograr, pero creo que buscas GroupUser. Puedes obtener una lista de los group_ids y los user_ids de sus propietarios usando algo como:
Gracias, esto es definitivamente un paso adelante. Mi objetivo es mostrar a los propietarios de un grupo debajo del nombre del grupo en la página de índice de grupos.
Necesitarás escribir un pequeño plugin para serializar la información correcta. Vi tu publicación en Marketplace. ¡Espero que alguien se anime a ayudarte!
Armemos algo como una prueba de concepto muy básica que podría darte un punto de partida para que lo resuelvas por tu cuenta:
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 juntas todo eso y activas el plugin en la configuración de tu sitio, deberías ver los IDs de los propietarios del grupo listados en la página de grupos.
No podré ayudarte más allá de esto, ¡te deseo mucha suerte!
Esto es extremadamente útil, gracias. Entiendo que no puedes brindar más ayuda con el código, pero espero poder hacer dos preguntas generales que también podrían ser útiles para otros:
— ¿Podrías explicar brevemente por qué es necesario un serializador aquí? (Trato de entenderlo no solo para este caso, sino también para otras personalizaciones).
Y solo una pregunta rápida: ¿podría lograr esto directamente en mi panel de control? (Crear un plugin sería mucho más organizado, sin duda, pero como estoy en un plan alojado, no puedo importar nuevos plugins directamente; al menos requiere unos pasos adicionales).
¡Claro! Los datos no están expuestos de forma predeterminada en el BasicGroupSerializer. Solo incluimos lo que necesitamos.
Es un poco complicado de seguir, pero la única razón por la que el componente groups-info tiene lo que tiene disponible es porque recibe group de su plantilla padre:
Y la plantilla padre lo obtiene del controlador:
Me temo que no. ¡A menos que haya alguna magia de la que no tenga conocimiento!
Hola @tshenry, estoy intentando configurar un plugin que incluye algo de código similar al que proporcionaste arriba para exponer al propietario del grupo. Tengo una duda que estoy aclarando:
–el modelo relevante aquí es “group” (al que se hace referencia en groups-info)
–pero en el serializer, no dices: add_to_serializer(:group, :owners)… En lugar de referenciar :group, haces referencia a :basic_group, así:
add_to_serializer(:basic_group, :owners)
¿Por qué haces referencia a basic_group en lugar de group en add_to_serializer?
¿Cómo identificaste que ese serializador era el correcto para este caso?
Esto es lo que he podido deducir: En el controlador de grupos, dentro de la acción index, existe una función (o método) llamada render_json_dump que incluye el BasicGroupSerializer en la llamada a serialize_data.
La página relevante para mostrar los datos de los grupos es el índice de grupos, por lo que la acción index del controlador es la correcta para examinar aquí.
¿Es así como sabes que el BasicGroupSerializer es el adecuado para referenciarlo aquí?
Si todo lo anterior es correcto, ¿se usaría el GroupShowSerializer para mostrar la página de detalles del grupo, dado que ese es el serializador referenciado en la acción show del controlador? (la página con los detalles de un grupo, aunque no parece existir una vista llamada “groups.show”).
¿Y qué sucede si no hay ningún serializador referenciado, como en la acción new del controlador?
Un detalle adicional a tener en cuenta, que es realmente confuso y me confundió mucho al principio: Rails es un framework y utiliza convenciones de nomenclatura muy estrictas para lograr sus efectos mágicos. No es obvio de inmediato, si no estás acostumbrado, cómo se conectan todas las cosas, pero si tienes en cuenta las convenciones de nomenclatura, todo empieza a tener más sentido.
Gracias por esa referencia, es muy útil. Encuentro el archivo de rutas un poco confuso. Por ejemplo, por lo que puedo ver, no hay ninguna acción de controlador groups#index referenciada, aunque claramente es la acción relevante para la página principal de grupos. Sin embargo, sí veo la acción groups#index cuando ejecuto:
% rails routes, lo que supongo que también es una forma útil de ver cómo corresponde una página determinada a un controlador.