Riepilogo
Nella coda di revisione (/review), se un moderatore modifica i tag su un post in coda e poi clicca su Approva, la richiesta di approvazione fallisce con un Errore Interno del Server 500.
Passaggi per Riprodurre
- Assicurarsi che un post sia in attesa nella coda di revisione (ad esempio, da un utente/gruppo che richiede approvazione).
- Andare su
/review. - Aprire l’elemento in coda.
- Modificare i tag utilizzando l’interfaccia utente del selettore di tag.
- Cliccare su Approva.
- Osservare una risposta 500.
Comportamento Atteso
Il post dovrebbe essere approvato con successo, con i tag aggiornati applicati.
Comportamento Attuale
L’approvazione fallisce con un errore 500.
Schema della richiesta di esempio:
PUT /review/{id}/perform/approve_post?version={x} → 500 (Internal Server Error)
Cosa Sembra Stare Succedendo (Causa Principale)
Dopo aver modificato i tag nell’interfaccia utente di revisione, il payload del revisionabile memorizza oggetti tag completi invece di stringhe di nomi di tag.
Prima di modificare i tag:
payload["tags"] = ["tag-one", "tag-two"]
Dopo aver modificato i tag in /review:
payload["tags"] = [
{"id"=>123, "name"=>"tag-one", "description"=>nil, "count"=>50, ...},
{"id"=>456, "name"=>"tag-two", "description"=>nil, "count"=>30, ...}
]
Quando l’azione di approvazione elabora i tag, sembra aspettarsi stringhe, ma riceve hash/oggetti, causando il 500.
Soluzione Temporanea
Normalizzare i tag nuovamente in nomi:
r = ReviewableQueuedPost.find(ID)
r.payload["tags"] = r.payload["tags"].map { |t| t.is_a?(Hash) ? t["name"] : t }
r.save!
