500-Fehler beim Genehmigen eines überprüfbaren Beitrags nach dem Bearbeiten von Tags in /review (Tags als Objekte, nicht als Strings gespeichert)

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

  1. Stellen Sie sicher, dass ein Beitrag in der Überprüfungswarteschlange wartet (z. B. von einem Benutzer/einer Gruppe, die eine Genehmigung erfordert).
  2. Gehen Sie zu /review.
  3. Öffnen Sie den zur Überprüfung anstehenden Eintrag.
  4. Bearbeiten Sie die Tags mithilfe der UI des Tag-Selektors.
  5. Klicken Sie auf Genehmigen.
  6. 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!

Danke für die Meldung. Wir werden uns das ansehen.

1 „Gefällt mir“