如何按日期对主题回复进行排序

您好。我不知道这是否可能,如果可能的话,我搜索了很多但没有找到任何关于此的信息,但我希望按创建日期对我的论坛的所有主题的所有回复进行排序。

我一直在进行从旧论坛到全新 Discourse 的数据迁移。为此,我通过 API 重新创建主题和回复,以便我可以将它们发送到 Discourse,并使用回复最初创建的日期。这一直运行良好,因为当我转到 Discourse 上创建的回复时,我可以看到原始日期就在那里。

但是,尽管所有回复都带有原始日期,但它们的排序顺序是它们在 API 中创建的顺序。我不知道这是一个错误还是故意的,或者是否有任何方法可以按我在 API POST 调用中设置的日期进行排序,但如果可以的话,我希望在此主题上获得一些帮助。祝大家一切顺利。

我正在使用版本 2.8.8。

不要这样做。您应该使用导入脚本。您可以查看 discourse/script/import_scripts at main · discourse/discourse · GitHub 中的示例,并在此处搜索有关为其他论坛运行导入脚本的说明。

帖子按创建顺序显示。因此,您需要让您的 API 脚本(您真的不想使用它)按正确的顺序创建它们。

1 个赞

嗯,谢谢你的回复。我之前也考虑过使用脚本,但由于 Discourse 有很多表关系,所以我决定通过 API 来操作。但是,有没有办法创建一个脚本,只在其中一个表中插入数据,然后 Discourse 会处理其余的关系?这样可能会让我更容易。

但我的意思是,到目前为止,通过 API 进行迁移一直有效。我想知道,如果 Discourse 不按 created_at 属性排序显示帖子,那么在 端点 上发送该属性来创建帖子的意义何在……这难道不应该是一个功能请求吗?

是的,事实上,有!我链接了示例。

如果那是真的,你就不会发帖了。:wink:

不,因为解决您问题的方法是使用我链接的几十个示例之一来解决您的问题。我保证这会容易得多。在我真正学会 Ruby 之前,我就写了好几个导入脚本。

即使您想使用 API,您仍然需要按 created_at 顺序创建帖子。插件(或可能是主题组件?)中有解决方法,但您真的不想那样做。

@JammyDodger 指出有一个 rake 任务

rake posts:reorder_posts

这可能会解决您的问题。如果您正在导入几十个主题和几百个帖子,您可以试试。

2 个赞

我明白了。我会继续坚持我的想法,只是想了解一下关于创建帖子时 POST 调用中的 created_at 属性——如果帖子不能按此排序,它似乎是无用的。无论如何,谢谢。

仅供参考,事情之所以不能仅按创建日期排序,是因为系统设计支持将帖子从一个主题移动到另一个主题,在这种情况下,如果日期重叠,帖子“混淆”会更不理想。

这是关于此事的早期讨论:

关于如何最好地进行迁移,我同意 Jay 的观点。你最好遵循先例。虽然它不是 Web API,但现有脚本依赖于一种更低级别的“迁移 API”,并考虑了这一点。
Web API 在很大程度上被设计为前端 Discourse 应用程序的 API。虽然它已成功用于各种集成,但它已针对其主要目的进行了优化。

2 个赞

它并非没用,它会按广告宣传的那样设置 created_at 日期。只需在创建帖子之前按 created_at 对其进行排序即可。