Wir verwenden die external_id-Funktion für die automatische Erstellung von Themen in unserer Integration. Mir ist jedoch aufgefallen, dass wir, wenn wir ein Thema löschen, kein neues mit derselben external_id erstellen können und stattdessen die Fehlermeldung erhalten:
{'action': 'create_post', 'errors': ['External has already been taken']}
Ist es überhaupt möglich, dieselbe external_id wiederzuverwenden, nachdem ein Thema, das sie verwendet hat, gelöscht wurde?
Mir ist ein Workaround bekannt, der anderswo diskutiert wurde und benutzerdefinierte Felder für Benutzerobjekte verwendet. Allerdings scheinen Themenobjekte keine benutzerdefinierten Felder zu unterstützen. Gibt es eine Möglichkeit?
Das liegt daran, dass gelöschte Themen als gelöscht markiert und nicht aus der Datenbank entfernt werden. Die ID wieder einem anderen Thema zuzuordnen, scheint eine schlechte Idee zu sein (aber Sie haben nicht danach gefragt). Sie können erzwingen, dass das Thema tatsächlich gelöscht wird (möglicherweise über Introducing permanently delete post functionality).
Die Herausforderung besteht darin, dass der Wert, den wir für die externe ID des Themas verwenden, aufgrund einer Einschränkung in der App, mit der wir integrieren (CatalogIt – stellt eine schreibgeschützte API bereit), schwer zu ändern ist (manuelle Bedienung). Wir löschen und erstellen Themen oft manuell neu, während wir entwickeln (dies ist alles, was die Integration tut – sie erstellt Diskussions-Themen für Elemente in CatalogIt, wenn ein Benutzer auf einen Link „Dieses Element diskutieren“ klickt), was uns zwingt, diesen Wert jedes Mal zu ändern. Wenn der Wert nach dem Löschen des Themas nicht geändert wird und ein Benutzer später auf den Link „Dieses Element diskutieren“ klickt, stoßen wir auf den Fehler „external already taken“.
Vielleicht ist Archivieren statt Löschen eine bessere Idee, oder vielleicht gibt es einen Ausblenden/Einblenden-Mechanismus, auf den wir zurückgreifen können. Ich bin mit Discourse nicht vertraut, einige Recherche ist erforderlich, ich werde mich damit befassen und sehen, was ich finden kann.