Encontrar todos os grupos do usuário em um tópico

Gostaria de exibir um pequeno diferencial para todos os grupos de um usuário em cada postagem em um tópico (abaixo do nome de usuário). Tenho a funcionalidade básica funcionando, mas cheguei a um impasse ao encontrar os grupos do usuário que fez a postagem. Nos attrs do widget de metadados da postagem, posso encontrar alguns detalhes do usuário, mas os grupos não estão incluídos. Acho que preciso adicionar os grupos ao serializador de postagem, mas não tenho certeza de como fazer isso.

2 curtidas

Olá,

Não sou um especialista – Em um plugin, você pode adicionar o campo groups ao serializador de posts, algo como isso:

add_to_serializer(
    :post,
    :groups
) { object.user&.groups }

No entanto, tenha em mente que, como está, qualquer pessoa pode ver em qual grupo uma pessoa está.
Dito isso, acredito que, desde que você esteja usando um flair, o nome do grupo será visível para qualquer pessoa, independentemente das permissões.

Você também pode inserir um novo campo available_flairs para retornar apenas os campos necessários dos flairs do grupo:

add_to_serializer(:post, :available_flairs) do
  flairs = Array(object.user&.groups&.map do |group|
    next unless group.flair_url
    {
      id: group.id,
      name: group.name,
      url: group.flair_url,
      bgColor: group.flair_bg_color,
      color: group.flair_color
    }
  end).compact

  flairs
end

Espero que ajude. :+1:

3 curtidas

Este componente pode ser de interesse durante a criação de posts, talvez para adicionar “flairs” aos posts durante a criação?

A segunda solução é exatamente o que estou procurando, mas não consigo fazê-la funcionar. Por algum motivo, o array available_flairs não aparece. Estou certo ao assumir que o código deve ir para o plugins.rb?

Para aparecer no contexto post-meta-data, tente usar a API. Isso deve funcionar!

api.includePostAttributes("available_flairs");

Isso resolveu o problema. Obrigado pela ajuda!

1 curtida

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.