Erro 500 ao aprovar uma postagem revisável após editar tags em /review (tags salvas como objetos, não strings)

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

  1. Garanta que uma postagem esteja aguardando na fila de revisão (por exemplo, de um usuário/grupo que requer aprovação).
  2. Vá para /review.
  3. Abra o item enfileirado.
  4. Edite as tags usando a interface do seletor de tags.
  5. Clique em Aprovar.
  6. 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!

Obrigado por relatar. Vamos verificar.

1 curtida