¿Cómo puedo ordenar las respuestas del tema por fecha?

Hola. No sé si es posible, y si lo es, busqué mucho en Google y no encontré nada al respecto, pero me gustaría ordenar todas las respuestas de todos los temas de mi foro por fecha de creación.

He estado trabajando en una migración de datos de un foro antiguo a uno nuevo de Discourse. Para ello, estoy recreando los temas y las respuestas a través de la API para poder enviarlos a Discourse en la fecha en que la respuesta fue creada inicialmente. Eso ha funcionado bien, ya que cuando voy a las respuestas creadas en Discourse, puedo ver que está la fecha original.

Pero a pesar de que todas las respuestas tienen la fecha original, están ordenadas por el orden en que fueron creadas en la API. No sé si esto es un error o está previsto, o si hay alguna forma de ordenarlas por la fecha que establecí en la llamada POST de la API, pero si es así, me gustaría recibir ayuda sobre este tema. Saludos.

Estoy usando la versión 2.8.8.

No hagas eso. Quieres usar un script de importación. Puedes ver discourse/script/import_scripts at main · discourse/discourse · GitHub para ver ejemplos y buscar aquí instrucciones para ejecutar scripts de importación para otros foros.

Las publicaciones se muestran en el orden en que se crean. Por lo tanto, necesitarías que tu script de API (que realmente no quieres usar) las cree en el orden correcto.

1 me gusta

Hmmm, gracias por la respuesta. Pensé en usar un script hace un tiempo, pero como Discourse tiene muchas relaciones de tablas, decidí usar la API. Pero, ¿hay alguna forma de crear un script que inserte datos en una tabla y luego Discourse se encargue del resto de la relación? Eso podría facilitarme las cosas.

Pero quiero decir, la migración a través de la API ha estado funcionando hasta ahora. Me pregunto cuál es el propósito de poder enviar un atributo created_at en el endpoint para crear publicaciones si Discourse no las mostrará ordenadas por él de todos modos… ¿No debería ser esto una solicitud de función?

¡Sí, de hecho, la hay! Te enlacé a ejemplos.

Si eso fuera cierto, no habrías publicado. :wink:

No, porque la forma de resolver tu problema es usar uno de los docenas de ejemplos que enlacé. Te prometo que será mucho, mucho más fácil. Escribí varios scripts de importación antes de aprender realmente ruby.

Incluso si quisieras usar la API, todavía necesitas crear las publicaciones en el orden created_at. Hay formas de ordenarlas en un plugin (¿o tal vez un componente temático?), pero realmente no querrás hacer eso.

@JammyDodger señala que hay una tarea rake

    rake posts:reorder_posts

Eso podría resolver tu problema. Si estás importando unas pocas docenas de temas y unos cientos de publicaciones, podrías intentarlo.

2 Me gusta

Entendido. Seguiré con mi idea, solo quería saber sobre el atributo created_at en la llamada POST al crear una publicación, que parece inútil si las publicaciones no se pueden ordenar por él. Gracias de todos modos.

Solo para tu información, la razón por la que las cosas no se ordenan por fecha de creación es porque están diseñadas para admitir la 移动 (yídòng - mover) publicaciones de un tema a otro, y en ese escenario, ha demostrado ser menos deseable que las publicaciones se “mezclen” si las fechas se superponen.

Aquí hay una discusión anterior sobre eso:

Sobre el tema de la mejor manera de abordar una migración, estoy de acuerdo con Jay. Probablemente sea mejor seguir el arte previo aquí. Si bien no es una API web, los scripts existentes dependen de una “API de migración” de nivel inferior, por así decirlo, teniendo esto en cuenta.
La API web está diseñada en gran medida como una API para la aplicación Discourse del front-end. Si bien se ha utilizado con éxito para diversas integraciones, está optimizada para su propósito principal.

2 Me gusta

No es inútil, establece la fecha created_at como se anuncia. Simplemente ordena tus publicaciones por created_at antes de crearlas.