Resumo
Na fila de revisão (/review), se um moderador editar as tags em uma postagem enfileirada e depois clicar em Aprovar, a solicitação de aprovação falha com um Erro Interno do Servidor 500.
Passos para Reproduzir
- Garanta que uma postagem esteja aguardando na fila de revisão (por exemplo, de um usuário/grupo que requer aprovação).
- Vá para
/review. - Abra o item enfileirado.
- Edite as tags usando a interface do seletor de tags.
- Clique em Aprovar.
- Observe uma resposta 500.
Comportamento Esperado
A postagem deve ser aprovada com sucesso, com as tags atualizadas aplicadas.
Comportamento Atual
A aprovação falha com um erro 500.
Padrão de solicitação de exemplo:
PUT /review/{id}/perform/approve_post?version={x} → 500 (Internal Server Error)
O que Parece Estar Acontecendo (Causa Raiz)
Após editar as tags na interface de revisão, o payload do revisável armazena objetos de tag completos em vez de strings de nome de tag.
Antes de editar as tags:
payload["tags"] = ["tag-one", "tag-two"]
Após editar as tags em /review:
payload["tags"] = [
{"id"=>123, "name"=>"tag-one", "description"=>nil, "count"=>50, ...},
{"id"=>456, "name"=>"tag-two", "description"=>nil, "count"=>30, ...}
]
Quando a ação de aprovação processa as tags, parece esperar strings, mas recebe hashes/objetos, levando ao 500.
Solução Alternativa
Normalizar as tags de volta para nomes:
r = ReviewableQueuedPost.find(ID)
r.payload["tags"] = r.payload["tags"].map { |t| t.is_a?(Hash) ? t["name"] : t }
r.save!
