カテゴリ内のユーザーのメッセージを全削除

みなさん、こんにちは。

最近、特定のカテゴリに属するユーザーの投稿をすべて削除する必要が生じました。「コンテンツ削除に関する議論」はさておき、「あっ、簡単だ。検索してチェックボックスで結果をすべて選択し、削除すればいい」と思いました。

しかし、その方法ではメッセージそのものではなく、トピックを削除してしまうようです。検索結果にはメッセージが表示されているはずなのに(トピックも含まれていますが)。

これを行う安全な方法はありませんか?最初はデータベースに対して非常に過激な操作が必要なのではないかと考えましたが(その可能性を完全に否定はしていません)、UI から 50 以上のトピックをまとめて削除できるのであれば、メッセージのみを対象とした方法があるかもしれません(あるいはコンソールを使って行う方法など。「試して」データベースを壊したくはないので :P)。

ありがとうございます!

「いいね!」 1

これらについては個人的な経験はありませんが、API を使って「ソフト削除」が可能だと考えています。

また、「rails delete post」で検索すると、「ハード削除」に関するトピックがいくつか見つかります。

あなたが何を達成しようとしているかについて、もう少し詳細を教えていただければ、より具体的なアドバイスができるかもしれません。

@JammyDodger さん、こんにちは

リンクをありがとうございます。

単に、特定のカテゴリ内のユーザーのすべてのメッセージを削除したいだけです。 :stuck_out_tongue:

追伸:コンソールを使うのがいいかもしれませんか?データベースを壊したくないので…

「いいね!」 1

このトピックで同様の件について継続的な議論が行われています:Delete deleted-posts permanently in bulk?

それが何かヒントになるかもしれませんね?

遅れて申し訳ありませんが、必要であれば新しい投稿を作成します。

私たちには政治カテゴリがあり、一部のユーザーは明らかな理由でこのカテゴリのすべての投稿を削除したいと考えています。彼らのためにこれを簡単に行う方法はありますか?

Rais コンソールを使用するという方法もあります。

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

その後、category slugusername を入力して、以下の形式に従ってください。
コードをコピーしてコンソールに貼り付けます。

注意:

  • トピックが削除されるのを防ぐため、最初の投稿は削除されません。
  • サブカテゴリを対象とする場合は、親を指定してください。例: parent_cat_slug/cat_slug

:warning: 変更を加える前に、必ずバックアップを作成してください。

Category
  .find_by_slug_path_with_id("=CATEGORY_SLUG=")
  .tap do |c|
    u = User.find_by_username("=USERNAME=")
    Post
      .joins(:topic)
      .where(user_id: u.id)
      .where("topics.category_id = ?", c.id)
      .where.not(post_number: 1)
      .where(deleted_at: nil)
      .find_each { |p| PostDestroyer.new(Discourse.system_user, p).destroy }
  end
「いいね!」 1

ありがとうございます!これは素晴らしいです。