我导入了所有内容,但希望每个新主题的主题日期都更改为从今天开始发布,每个主题没有额外的帖子。
在主题的扳手菜单中是“更改时间戳”:
弹出的对话框解释道:
请选择主题的新时间戳。主题中的帖子将被更新为具有相同的时间差。
就我而言,我正在使用 API,并且忘记将 created_at 设置为实际的帖子日期。
不过我需要为 3000 多个帖子执行此操作
听起来这是 API 的一项工作:updateTopicTimestamp。
你可以在 Rails 中完成。我想如果你搜索一下,可能会有一个例子。这是一个开始。
Topic.update_all(created_at: Time.now()
但我会做一些测试。比如,你还想更新帖子吗?
没有帖子,只有一个主题/开篇帖,您给的命令能直接运行吗?
更改主题时间戳的对话框显示:
请选择主题的新时间戳。主题中的帖子将更新为相同的时间差。
如果您更改主题的日期,它会自动修复所有回复,使其相对于新日期正确。因此,如果主题最初的日期是 1 月 1 日,回复的日期是 1 月 5 日,将主题日期更改为 1 月 2 日也会将回复更新为 1 月 6 日。很简单!
出于好奇,您为什么希望所有 3000 多个主题都具有相同的日期?
不过,抛开好奇心不谈,如果您熟悉使用 API 或 rails 控制台(以防万一,最好先进行备份),您应该能够做到这一点。
本主题中包含有关如何获取相关 API 的信息 - Reverse engineer the Discourse API
并且在 Administrative Bulk Operations 中有一些不同的 rails 技术示例,您可以使用它们来构建所需内容(或为您提供搜索方向)。
我还在等待支持,请提供帮助。
试过了,似乎没有任何改变,但也没有报错。
为了遵循 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
您可能还想更改 updated_at。
