Administrative Bulk Operations からの議論を続けます:
すべてのトピックから、一定期間を経過したウィスパーを削除する方法を探しています。
一般的に、ウィスパーは潜在的なモデレーターアクションについて議論するために使用されますが、アクションが完了すればウィスパーはあまり役立たなくなり、時間が経つにつれてノイズになっていきます。
post_type=4(ウィスパー)で、一定期間を経過した投稿を削除することは可能ですが、これではデータベースに不整合が残ったり、フォーラムのキー制約により許可されなかったりする可能性があります。
安全に行う方法はあるでしょうか?
「いいね!」 2
tshenry
(Taylor)
2
投稿を削除する最もクリーンな方法は以下の通りです:
whispers = Post.where(post_type: 4).where("created_at < ?", 1.year.ago)
whispers.find_each do |w|
PostDestroyer.new(Discourse.system_user, w, skip_staff_log: true).destroy
putc "."
end
これは、システムユーザーが投稿の削除ボタンを使って手動で各投稿を削除したかのように動作します。スタッフログを汚さないように skip_staff_log を含めていますが、アクションをログに記録したい場合はこれを削除することもできます。
これで要件を満たせるでしょうか?
「いいね!」 4
完璧に見えます!ありがとうございます!
テストインスタンスで試してみます。数千もの「ささやき」があるかもしれないので、どれくらい時間がかかるか見てみましょう!
「いいね!」 2
このタスクはうまく機能していますが、ウィスパーは単に折りたたまれているだけで、展開すると管理者やモデレーターに見えてしまいます。
トピックの整理にはなりますが、完全に削除できればと思っていたのです。ウィスパーを新しいトピックに移動し、その後そのトピックを削除するか、少なくともモデレーターからは非表示にできないかと考えましたが、以下の記事を見つけました:Is there a way to remove all the deleted/hidden posts?
また、より最近のものとして:Why is it not possible to permanently delete topics or posts?
残念ながら、これらの記事によると、データを完全に削除する方法はないようです 