Errore 500 durante l'approvazione di un post revisionabile dopo aver modificato i tag in /review (tag salvati come oggetti, non stringhe)

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

  1. Assicurarsi che un post sia in attesa nella coda di revisione (ad esempio, da un utente/gruppo che richiede approvazione).
  2. Andare su /review.
  3. Aprire l’elemento in coda.
  4. Modificare i tag utilizzando l’interfaccia utente del selettore di tag.
  5. Cliccare su Approva.
  6. 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!

Grazie per la segnalazione. Daremo un’occhiata.

1 Mi Piace