Zusammenfassung
Wenn ein Moderator in der Überprüfungswarteschlange (/review) die Tags eines zur Überprüfung anstehenden Beitrags bearbeitet und dann auf Genehmigen klickt, schlägt die Genehmigungsanforderung mit einem 500 Internen Serverfehler fehl.
Schritte zur Reproduktion
- Stellen Sie sicher, dass ein Beitrag in der Überprüfungswarteschlange wartet (z. B. von einem Benutzer/einer Gruppe, die eine Genehmigung erfordert).
- Gehen Sie zu
/review. - Öffnen Sie den zur Überprüfung anstehenden Eintrag.
- Bearbeiten Sie die Tags mithilfe der UI des Tag-Selektors.
- Klicken Sie auf Genehmigen.
- Beobachten Sie eine 500-Antwort.
Erwartetes Verhalten
Der Beitrag sollte erfolgreich genehmigt werden, wobei die aktualisierten Tags angewendet werden.
Tatsächliches Verhalten
Die Genehmigung schlägt mit einem 500-Fehler fehl.
Beispielanfragemuster:
PUT /review/{id}/perform/approve_post?version={x} → 500 (Internal Server Error)
Was anscheinend passiert (Grundursache)
Nach der Bearbeitung der Tags in der Überprüfungs-UI speichert die Reviewable-Nutzlast vollständige Tag-Objekte anstelle von Tag-Namen-Strings.
Vor der Bearbeitung der Tags:
payload["tags"] = ["tag-one", "tag-two"]
Nach der Bearbeitung der Tags in /review:
payload["tags"] = [
{"id"=>123, "name"=>"tag-one", "description"=>nil, "count"=>50, ...},
{"id"=>456, "name"=>"tag-two", "description"=>nil, "count"=>30, ...}
]
Wenn die Genehmigungsaktion Tags verarbeitet, scheint sie Strings zu erwarten, erhält aber Hashes/Objekte, was zum 500-Fehler führt.
Workaround
Tags zurück in Namen normalisieren:
r = ReviewableQueuedPost.find(ID)
r.payload["tags"] = r.payload["tags"].map { |t| t.is_a?(Hash) ? t["name"] : t }
r.save!
