Ich sperre ein Thema über die API (Gem) und kann es sperren und entsperren, wenn dies der einzige Befehl in der Kette ist. Wenn ich jedoch vorher einen Beitrag im Thema erstelle und der nächste Befehl das Sperren ist, wird der Beitrag erstellt, das Thema gesperrt und dann sofort wieder entsperrt!
Das ist wirklich seltsam. Wenn ich nur den Beitrag erstelle oder nur das Thema sperre, funktioniert alles einwandfrei. Wenn ich jedoch beides versuche, wird das Thema am Ende von selbst wieder entsperrt!
Vorläufig habe ich mich entschieden, das Thema nicht zu sperren – aber ich wollte dies hier posten, falls es sich um etwas handelt, das eine Untersuchung wert ist.
Sperrst du es direkt nach dem Erstellen eines Beitrags im Thema? Wenn ja, warte eine Minute und versuche es dann erneut zu sperren, um zu sehen, ob es gesperrt bleibt. Nur ein Gedanke.
Guter Fund, ich werde das untersuchen, sobald ich Zeit habe. Das Kombinieren dieser beiden API-Aufrufe in einer einzigen Anfrage entspricht nicht genau der Vorgehensweise in der Benutzeroberfläche (man kann kein neues, gesperrtes Thema erstellen). Daher prüft dieser API-Endpunkt wahrscheinlich nicht das Sperr-Flag oder setzt es beim Erstellen eines Themas standardmäßig auf entsperrt.
Ich habe mir das heute kurz angesehen, um zu prüfen, ob es sich um eine schnelle Änderung handelt. Viele der Aktionen, die du auf Themen anwenden kannst, sollten jedoch besser erst nach der Erstellung des Themas ausgeführt werden. Ein Grund dafür ist, dass wir eigentlich den TopicStatusUpdater verwenden sollten, um das Thema zu schließen, anstatt es direkt in der Datenbank zu aktualisieren. Wenn wir den Status jedoch während der Erstellung des Themas aktualisieren, scheint das Thema geschlossen zu werden, bevor der erste Beitrag erstellt wird. Das führt zu diesem seltsamen Verhalten:
Vorläufig musst du zwei separate API-Anfragen stellen: Eine POST-Anfrage an /posts.json und, falls diese erfolgreich war, eine PUT-Anfrage an /t/{id}/status.json.
Ah, ich verstehe, ich habe genau missverstanden, was du vorhast. Ich dachte, du versuchst, ein Thema zu erstellen und gleichzeitig zu schließen. Allerdings bleibt meine vorherige Antwort gültig, wenn du einen Beitrag in einem bestehenden Thema erstellst und es gleichzeitig schließt. Du solltest einfach die zwei separaten Endpunkte verwenden.
Ich habe deinen Code gerade lokal getestet und er funktioniert bei mir einwandfrei. Was funktioniert nicht? Ich gehe davon aus, dass der Beitrag erstellt wird, aber das Thema einfach nicht geschlossen wird? Falls ja, könntest du bitte puts verwenden und das Ergebnis von @client.change_topic_status(slug, topic_id, params) ausgeben?
Als Nebenanmerkung: Beim Blick auf den Code im API-Gem stellen wir fest, dass wir die Variable slug überhaupt nicht verwenden. Ich werde daher ein Update vornehmen, um sie zu entfernen.