导入后如何更改主题日期

我导入了所有内容,但希望每个新主题的主题日期都更改为从今天开始发布,每个主题没有额外的帖子。

在主题的扳手菜单中是“更改时间戳”:

弹出的对话框解释道:

请选择主题的新时间戳。主题中的帖子将被更新为具有相同的时间差。

就我而言,我正在使用 API,并且忘记将 created_at 设置为实际的帖子日期。

2 个赞

不过我需要为 3000 多个帖子执行此操作

听起来这是 API 的一项工作:updateTopicTimestamp

2 个赞

你可以在 Rails 中完成。我想如果你搜索一下,可能会有一个例子。这是一个开始。

Topic.update_all(created_at: Time.now()

但我会做一些测试。比如,你还想更新帖子吗?

3 个赞

没有帖子,只有一个主题/开篇帖,您给的命令能直接运行吗?

更改主题时间戳的对话框显示:

请选择主题的新时间戳。主题中的帖子将更新为相同的时间差。

如果您更改主题的日期,它会自动修复所有回复,使其相对于新日期正确。因此,如果主题最初的日期是 1 月 1 日,回复的日期是 1 月 5 日,将主题日期更改为 1 月 2 日也会将回复更新为 1 月 6 日。很简单!

2 个赞

出于好奇,您为什么希望所有 3000 多个主题都具有相同的日期?

不过,抛开好奇心不谈,如果您熟悉使用 API 或 rails 控制台(以防万一,最好先进行备份),您应该能够做到这一点。

本主题中包含有关如何获取相关 API 的信息 - Reverse engineer the Discourse API

并且在 Administrative Bulk Operations 中有一些不同的 rails 技术示例,您可以使用它们来构建所需内容(或为您提供搜索方向)。

1 个赞

我还在等待支持,请提供帮助。

试过了,似乎没有任何改变,但也没有报错。

为了遵循 Jon 的建议,这是 Rails 控制台版本。

cd /var/discourse
./launcher enter app
rails c

然后,针对特定主题:

TopicTimestampChanger.new(topic: Topic.with_deleted.find(TOPIC_ID), timestamp: Time.now()).change!

对于所有无条件的主题:

Topic.find_each do |topic| 
	TopicTimestampChanger.new(topic: topic, timestamp: Time.now()).change!  
end
2 个赞

您可能还想更改 updated_at

1 个赞