Acho que essa questão entra em detalhes do Rails, mas vamos lá:
Estou tentando descobrir como exibir o proprietário ou os proprietários de cada grupo na página de índice de grupos (equivalente a esta página).
Meu ponto de partida é o modelo de grupo, que me sugere que a característica de proprietários do grupo não está diretamente associada ao grupo (ao contrário, digamos, de “full_name”, que vejo fazer parte do esquema do grupo no final desse link).
Portanto, está claro que não posso chamar group.owners como posso chamar group.full_name. Da mesma forma, não acho que consiga obter essas informações de volta pela API ao recuperar dados sobre um grupo, pois “owners” não parece ser um dos valores retornados.
Como eu poderia obter os proprietários de um grupo para exibir essas informações?
Não estou totalmente claro sobre o que você está tentando alcançar, mas acho que você está procurando por GroupUser. Você pode obter uma lista de group_ids e os user_ids dos seus proprietários usando algo como:
Obrigado, isso é definitivamente um passo à frente. Meu objetivo é exibir os proprietários de um grupo abaixo do nome do grupo na página de índice de grupos.
Você precisará escrever um pequeno plugin para serializar as informações corretas. Vi sua postagem no Marketplace. Espero que alguém se interesse pela sua ideia!
Montei algo como uma prova de conceito super básica que pode te dar um ponto de partida para descobrir como fazer isso por conta própria:
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
Se você juntar tudo isso e ativar o plugin nas configurações do seu site, deverá ver os IDs dos usuários proprietários dos grupos listados na página de grupos.
Isso é extremamente útil—obrigado. Entendo que você não possa fornecer mais ajuda com código, mas espero poder fazer duas perguntas gerais que também podem ser úteis para outras pessoas:
–Você pode explicar brevemente por que um serializador é necessário aqui? (estou tentando entender não só para este caso, mas também para outras personalizações)
E só uma pergunta rápida—seria possível fazer isso apenas no meu painel? (criar um plugin seria certamente mais organizado, mas como estou em um plano hospedado, não consigo importar novos plugins diretamente—pelo menos exigiria alguns passos a mais)
Claro Os dados não são expostos por padrão no BasicGroupSerializer. Incluímos apenas o que é necessário.
É um pouco confuso de seguir, mas a única razão pela qual o componente groups-info tem o que tem disponível é porque ele recebe group de seu template pai:
E o template pai o recebe do controlador:
Temor que não. A menos que exista alguma mágica da qual eu não tenha conhecimento!
Olá @tshenry, estou tentando configurar um plugin que inclui algum código semelhante ao que você forneceu acima para expor o proprietário do grupo. Tenho uma dúvida sobre isso:
–o modelo relevante aqui é “group” (referenciado pelo groups-info)
–mas no serializer, você não diz: add_to_serializer(:group, :owners)… Em vez de referenciar :group, você referencia :basic_group, assim:
add_to_serializer(:basic_group, :owners)
Por que você referencia basic_group, em vez de group, no add_to_serializer?
Como você identificou que esse serializador era o adequado para este caso?
Isso é o que consegui reunir: no controlador de grupos, na ação index, há uma função (ou método) render_json_dump que inclui o BasicGroupSerializer na chamada serialize_data.
A página relevante para exibir os dados dos grupos é o índice de grupos, então a ação index no controlador é a correta para analisar aqui.
Foi assim que você soube que o BasicGroupSerializer era o correto para referenciar aqui?
Se tudo isso estiver correto, o GroupShowSerializer seria usado para exibir a página de visualização do grupo, já que é o serializador referenciado na ação show do controlador? (a página com os detalhes de um grupo — embora não pareça haver uma visualização “groups.show”).
E então, o que acontece se não houver nenhum serializador referenciado, como na ação new do controlador?
Mais uma coisa a notar, que é realmente confusa e me confundiu bastante no início: Rails é um framework e usa convenções de nomenclatura muito rígidas para fazer parte de sua mágica funcionar. Não fica imediatamente claro, quando você não está acostumado, como tudo é conectado, mas ao levar em conta as convenções de nomenclatura, tudo começa a ficar mais claro.
Obrigado por essa referência—muito útil. Achei o arquivo de rotas um pouco confuso. Por exemplo, pelo que consigo ver, não há nenhuma ação de controlador groups#index referenciada, mesmo sendo claramente a ação relevante para a página principal de grupos. No entanto, vejo a ação groups#index quando executo:
% rails routes, o que, imagino, também é uma maneira útil de ver como uma página específica corresponde a um controlador.