Hallo. Ich weiß nicht, ob das möglich ist, und wenn ja, habe ich viel gegoogelt und nichts darüber gefunden, aber ich möchte alle Antworten aller Themen meines Forums nach dem Erstellungsdatum sortieren.
Ich habe an einer Datenmigration von einem alten Forum zu einem brandneuen Discourse gearbeitet. Dazu erstelle ich die Themen und Antworten über die API neu, damit ich sie an dem Datum, an dem die Antwort ursprünglich erstellt wurde, an Discourse senden kann. Das hat gut funktioniert, denn wenn ich die erstellten Antworten in Discourse aufrufe, sehe ich, dass das ursprüngliche Datum vorhanden ist.
Aber obwohl alle Antworten das ursprüngliche Datum haben, werden sie nach der Reihenfolge sortiert, in der sie in der API erstellt wurden. Ich weiß nicht, ob dies ein Fehler ist oder so beabsichtigt, oder ob es eine Möglichkeit gibt, sie nach dem Datum zu sortieren, das ich im API POST-Aufruf festgelegt habe, aber wenn ja, hätte ich gerne Hilfe zu diesem Thema. Viel Erfolg, Leute.
Beiträge werden in der Reihenfolge angezeigt, in der sie erstellt werden. Sie müssten also Ihr API-Skript (das Sie wirklich nicht verwenden möchten) in der richtigen Reihenfolge erstellen lassen.
Hmmm, danke für die Antwort. Ich habe vor einiger Zeit darüber nachgedacht, ein Skript zu verwenden, aber da Discourse viele Tabellenbeziehungen hat, habe ich mich entschieden, die API zu verwenden. Aber gibt es eine Möglichkeit, ein Skript zu erstellen, das Daten in eine Tabelle einfügt und Discourse dann den Rest der Beziehung handhabt? Das könnte mir die Arbeit erleichtern.
Aber ich meine, die Migration über die API hat bisher funktioniert. Ich frage mich, was der Sinn darin ist, ein created_at-Attribut an den Endpunkt zum Erstellen von Beiträgen senden zu können, wenn Discourse es sowieso nicht danach sortiert anzeigt… Sollte das nicht eine Feature-Anfrage sein?
Ja, tatsächlich gibt es das! Ich habe Beispiele verlinkt.
Wenn das wahr wäre, hättest du nicht gepostet.
Nein, denn der Weg, dein Problem zu lösen, ist die Verwendung eines der Dutzenden von Beispielen, die ich verlinkt habe. Ich verspreche, es wird viel, viel einfacher sein. Ich habe mehrere Importskripte geschrieben, bevor ich überhaupt Ruby gelernt habe.
Selbst wenn du die API verwenden wolltest, musst du die Beiträge immer noch in der Reihenfolge created_at erstellen. Es gibt Möglichkeiten, sie in einem Plugin (oder vielleicht einer Theme-Komponente?) zu sortieren, aber das willst du wirklich nicht tun.
@JammyDodger weist darauf hin, dass es eine Rake-Aufgabe gibt
rake posts:reorder_posts
Das könnte dein Problem lösen. Wenn du ein paar Dutzend Themen und ein paar Hundert Beiträge importierst, könntest du das ausprobieren.
Ich verstehe. Ich werde meiner Idee weiter folgen, wollte nur bezüglich des created_at-Attributs beim POST-Aufruf beim Erstellen eines Beitrags wissen – das, wie es scheint, nutzlos ist, wenn die Beiträge nicht danach sortiert werden können. Danke trotzdem.
Nur zur Information, der Grund, warum Dinge nicht einfach nach dem Erstellungsdatum sortiert werden, ist, dass die Dinge so konzipiert sind, dass sie das Verschieben von Beiträgen von einem Thema zu einem anderen unterstützen. In diesem Szenario hat es sich als weniger wünschenswert erwiesen, wenn Beiträge “durcheinander geraten”, wenn sich die Daten überschneiden.
Hier ist eine frühere Diskussion darüber:
Zum Thema, wie man eine Migration am besten angeht, stimme ich Jay zu. Wahrscheinlich ist es besser, hier früheren Praktiken zu folgen. Obwohl es sich nicht um eine Web-API handelt, verlassen sich die vorhandenen Skripte mit diesem Gedanken im Hinterkopf auf eine “Migrations-API” auf niedrigerer Ebene.
Die Web-API ist weitgehend als API für die Discourse-Frontend-App konzipiert. Obwohl sie erfolgreich für verschiedene Integrationen eingesetzt wird, ist sie für ihren Hauptzweck optimiert.