我不确定这是否是最理想的方案,但我使用了这段代码,将已删除话题中的用户帖子内容替换为 "[deleted]"。这样既保留了帖子的存在记录,而且看起来比彻底删除它们更安全。
# 先进行备份
deleted_topic_id = 1234
user_id = 5678
t = Topic.unscoped.find(deleted_topic_id)
ps = t.posts.select { |p| p.user_id == user_id }
# 使用 `ps.count` 进行检查
ps.each do |p|
p.raw = '[deleted]'
p.save
end