Error 500 al aprobar una publicación revisable después de editar etiquetas en /review (etiquetas guardadas como objetos, no cadenas)

Resumen

En la cola de revisión (/review), si un moderador edita las etiquetas de una publicación en cola y luego hace clic en Aprobar, la solicitud de aprobación falla con un Error Interno del Servidor 500.


Pasos para Reproducir

  1. Asegúrese de que haya una publicación esperando en la cola de revisión (por ejemplo, de un usuario/grupo que requiera aprobación).
  2. Vaya a /review.
  3. Abra el elemento en cola.
  4. Edite las etiquetas usando la interfaz de usuario del selector de etiquetas.
  5. Haga clic en Aprobar.
  6. Observe una respuesta 500.

Comportamiento Esperado

La publicación debe aprobarse con éxito, aplicando las etiquetas actualizadas.


Comportamiento Actual

La aprobación falla con un error 500.

Patrón de solicitud de ejemplo:

PUT /review/{id}/perform/approve_post?version={x} → 500 (Internal Server Error)

Lo que Parece Estar Sucediendo (Causa Raíz)

Después de editar las etiquetas en la interfaz de usuario de revisión, la carga útil (payload) de lo revisable almacena objetos de etiqueta completos en lugar de cadenas de nombres de etiqueta.

Antes de editar las etiquetas:

payload["tags"] = ["tag-one", "tag-two"]

Después de editar las etiquetas en /review:

payload["tags"] = [
  {"id"=>123, "name"=>"tag-one", "description"=>nil, "count"=>50, ...},
  {"id"=>456, "name"=>"tag-two", "description"=>nil, "count"=>30, ...}
]

Cuando la acción de aprobar procesa las etiquetas, parece esperar cadenas, pero recibe hashes/objetos, lo que provoca el 500.


Solución Temporal

Normalizar las etiquetas de nuevo a nombres:

r = ReviewableQueuedPost.find(ID)
r.payload["tags"] = r.payload["tags"].map { |t| t.is_a?(Hash) ? t["name"] : t }
r.save!

Gracias por reportarlo. Lo revisaremos.

1 me gusta