Comment puis-je trier les réponses du sujet par date

Bonjour. Je ne sais pas si c’est possible, et si ça l’est, j’ai beaucoup cherché sur Google et je n’ai rien trouvé à ce sujet, mais j’aimerais trier toutes les réponses de tous les sujets de mon forum par date de création.

J’ai travaillé sur une migration de données d’un ancien forum vers un tout nouveau forum Discourse. Pour ce faire, je recrée les sujets et les réponses via l’API afin de pouvoir les envoyer à Discourse à la date à laquelle la réponse a été initialement créée. Cela a bien fonctionné car lorsque je consulte les réponses créées sur Discourse, je peux voir que la date d’origine est bien là.

Mais même si toutes les réponses ont la date d’origine, elles sont triées selon l’ordre dans lequel elles ont été créées dans l’API. Je ne sais pas s’il s’agit d’un bug ou si c’est intentionnel, ou s’il existe un moyen de les trier par la date que j’ai définie dans l’appel POST de l’API, mais si c’est le cas, j’aimerais de l’aide sur ce sujet. Merci beaucoup.

J’utilise la version 2.8.8.

Ne faites pas cela. Vous voulez utiliser un script d’importation. Vous pouvez consulter discourse/script/import_scripts at main · discourse/discourse · GitHub pour des exemples et rechercher ici des instructions pour exécuter des scripts d’importation pour d’autres forums.

Les publications sont affichées dans l’ordre dans lequel elles sont créées. Vous devrez donc avoir votre script d’API (que vous ne voulez vraiment pas utiliser) qui les crée dans le bon ordre.

1 « J'aime »

Hmm, merci pour votre réponse. J’avais pensé à utiliser un script il y a quelque temps, mais comme Discourse a beaucoup de relations entre tables, j’ai décidé de passer par l’API. Mais y a-t-il un moyen de créer un script qui insérera des données dans une table, puis Discourse gérera le reste de la relation ? Cela pourrait me faciliter les choses.

Mais je veux dire, la migration via l’API a fonctionné jusqu’à présent. Je me demande quel est l’intérêt de pouvoir envoyer un attribut created_at sur le point de terminaison pour créer des publications si Discourse ne les affichera pas triées par celui-ci de toute façon… Ne devrait-ce pas être une demande de fonctionnalité ?

Oui, en fait, il y en a un ! J’ai mis des liens vers des exemples.

Si c’était vrai, vous n’auriez pas posté. :wink:

Non, car la façon de résoudre votre problème est d’utiliser l’un des dizaines d’exemples que j’ai liés comme solution. Je vous promets que ce sera beaucoup, beaucoup plus facile. J’ai écrit plusieurs scripts d’importation avant même de connaître Ruby.

Même si vous vouliez utiliser l’API, vous devez toujours créer les publications dans l’ordre created_at. Il existe des moyens de les trier dans un plugin (ou peut-être un composant de thème ?), mais vous ne voudriez vraiment pas faire cela.

@JammyDodger souligne qu’il existe une tâche rake

    rake posts:reorder_posts

Cela pourrait résoudre votre problème. Si vous importez quelques dizaines de sujets et quelques centaines de publications, vous pourriez essayer cela.

2 « J'aime »

Je vois. Je vais continuer à suivre mon idée, je voulais juste savoir concernant l’attribut created_at lors de l’appel POST lors de la création d’un post - qui est, semble-t-il, inutile, si les posts ne peuvent pas être triés par celui-ci. Merci quand même.

Juste pour information, la raison pour laquelle les choses ne sont pas triées par date de création est que le système est conçu pour prendre en charge le déplacement de publications d’un sujet à un autre, et dans ce scénario, il s’est avéré moins souhaitable que les publications soient “mélangées” si les dates se chevauchent.

Voici une discussion antérieure à ce sujet :

Sur le sujet de la meilleure façon d’aborder une migration, je suis d’accord avec Jay. Vous feriez probablement mieux de suivre ce qui a été fait auparavant. Bien qu’il ne s’agisse pas d’une API web, les scripts existants s’appuient sur une “API de migration” de niveau inférieur en gardant cela à l’esprit.
L’API web est largement conçue comme une API pour l’application front-end Discourse. Bien qu’elle soit utilisée avec succès pour diverses intégrations, elle est optimisée pour son objectif principal.

2 « J'aime »

Ce n’est pas inutile, cela définit la date created_at comme annoncé. Triez simplement vos publications par created_at avant de les créer.