카테고리에서 특정 사용자의 모든 메시지 삭제

여러분 안녕하세요,

최근 특정 카테고리에서 한 사용자의 모든 게시물을 삭제해야 할 필요가 생겼습니다. 콘텐츠 삭제에 대한 "논쟁"은 일단 제쳐두고, "아, 쉽겠네. 그냥 검색해서 체크박스로 모든 결과를 선택한 뒤 삭제하면 되겠구나"라고 생각했습니다.

하지만 그렇게 하면 **토픽(Topics)**은 삭제할 수 있지만, 메시지는 잘 삭제되지 않는 것 같습니다. 검색 결과가 메시지로 표시되는 반면(토픽도 함께 나오긴 하지만), 실제로 삭제되는 대상은 메시지가 아닌 토픽인 것 같습니다.

이를 “안전하게” 수행하는 방법이 있을까요? 처음에는 데이터베이스(DB)에 매우 극단적인 영향을 줄 수 있다고 생각했지만(그 가능성을 배제하진 않습니다), UI에서 50개 이상의 토픽을 일괄 삭제할 수 있으니… 메시지만 삭제하는 방법이 있을까요? (아니면 콘솔을 이용하는 방법? 그냥 "시도"해서 DB를 망치지는 않으려 합니다 :stuck_out_tongue: )

감사합니다!

저는 이에 대한 개인적인 경험은 없지만, API를 통해 ‘soft’ delete(논리 삭제)를 수행할 수 있다고 생각합니다.

'rails delete post’로 검색하면 ‘hard’ delete(물리 삭제)에 대한 몇 가지 주제도 찾을 수 있습니다.

무엇을 이루고자 하는지에 대해 몇 가지 더 자세한 정보를 주시면, 사람들이 더 구체적인 팁을 알려줄 수 있을 것입니다.

Hi @JammyDodger

링크 감사합니다.

특정 카테고리에서 특정 사용자의 모든 메시지를 삭제하고 싶은 것뿐입니다. :stuck_out_tongue:

P.S. 콘솔을 사용하는 건 어떨까요? DB를 날리는 건 원치 않거든요…

비슷한 주제에 대한 논의가 이 토픽에서 진행 중입니다: Delete deleted-posts permanently in bulk?

여기서 영감을 얻을 수 있기를 바랍니다.

부활(네크로) 게시글을 올린 점 사과드립니다. 필요하시면 새 게시글을 작성할 수도 있습니다.

저희에는 정치 카테고리가 있으며, 명백한 이유들로 인해 일부 사용자들이 해당 카테고리에서 자신의 모든 게시글을 삭제하고 싶어 합니다. 이들을 위해 쉽게 이 작업을 수행할 수 있는 방법이 있을까요?

해결 방법 중 하나는 Rais 콘솔을 사용하는 것입니다.

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

이제 카테고리 슬러그와 사용자 이름을 입력하여 아래 양식을 따르세요.
코드를 복사하여 콘솔에 붙여넣으세요.

참고:

  • 토픽이 삭제되지 않도록 첫 번째 게시물을 삭제하지 않습니다.
  • 하위 카테고리를 대상으로 하는 경우, 부모 카테고리를 포함하여 제공해야 합니다. 예: 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

감사합니다! 정말 훌륭합니다.