Probleme beim Erstellen eines Beitrags und Sperren des Themas über die API

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.

3 „Gefällt mir“

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.

1 „Gefällt mir“

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.

3 „Gefällt mir“

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.

2 „Gefällt mir“

Hallo Blake, das Thema, für das ich es versucht habe, existiert bereits :slight_smile:

Dies war mein Ablauf:

  bot.create_post(topic_id, post_content)
  bot.switch_to_master_bot!("system")
  bot.lock_topic("", topic_id)

  def create_post(topic_id, post_content)
    @client.create_post(
      topic_id: "#{topic_id}",
      raw: "#{post_content}",
    )
  end

  def lock_topic(slug, topic_id)
    params = { status: 'closed', enabled: true }
    @client.change_topic_status(slug, topic_id, params)
  end

Ich verwende das Discourse API Gem.

Meinst du, dass das oben Genannte funktionieren sollte (oder funktioniert es bei dir)?

1 „Gefällt mir“

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.

3 „Gefällt mir“

Verwendet die API-Gem die richtigen/getrennten Endpunkte, Blake? (Ich dachte, das täten sie?)

Die Methoden client.create_post und client.change_topic_status gehören zur API-Gem :slight_smile:

2 „Gefällt mir“

Ja, diese Methoden verwenden die richtigen Endpunkte :slightly_smiling_face:

3 „Gefällt mir“

Das sollte dann funktionieren? (Aber es funktioniert nicht :sob:)

1 „Gefällt mir“

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.

2 „Gefällt mir“