Iceman
(Iceman)
9월 30, 2021, 6:48오후
1
여러분 안녕하세요,
최근 특정 카테고리에서 한 사용자의 모든 게시물을 삭제해야 할 필요가 생겼습니다. 콘텐츠 삭제에 대한 "논쟁"은 일단 제쳐두고, "아, 쉽겠네. 그냥 검색해서 체크박스로 모든 결과를 선택한 뒤 삭제하면 되겠구나"라고 생각했습니다.
하지만 그렇게 하면 **토픽(Topics)**은 삭제할 수 있지만, 메시지는 잘 삭제되지 않는 것 같습니다. 검색 결과가 메시지로 표시되는 반면(토픽도 함께 나오긴 하지만), 실제로 삭제되는 대상은 메시지가 아닌 토픽인 것 같습니다.
이를 “안전하게” 수행하는 방법이 있을까요? 처음에는 데이터베이스(DB)에 매우 극단적인 영향을 줄 수 있다고 생각했지만(그 가능성을 배제하진 않습니다), UI에서 50개 이상의 토픽을 일괄 삭제할 수 있으니… 메시지만 삭제하는 방법이 있을까요? (아니면 콘솔을 이용하는 방법? 그냥 "시도"해서 DB를 망치지는 않으려 합니다 )
감사합니다!
저는 이에 대한 개인적인 경험은 없지만, API를 통해 ‘soft’ delete(논리 삭제)를 수행할 수 있다고 생각합니다.
Discourse is backed by a complete JSON api. Anything you can do on the site you can also do using the JSON api.
The API is documented at docs.discourse.org . You can also use the discourse_api Ruby gem as a client library. However, not every endpoint is documented.
To determine how to do something with the JSON API here are some steps you can follow.
Example: recategorize a topic.
Go to a topic and start editing a category:
[image]
Open Chrome dev tools, switch to the Network tab, select …
'rails delete post’로 검색하면 ‘hard’ delete(물리 삭제)에 대한 몇 가지 주제도 찾을 수 있습니다.
무엇을 이루고자 하는지에 대해 몇 가지 더 자세한 정보를 주시면, 사람들이 더 구체적인 팁을 알려줄 수 있을 것입니다.
Iceman
(Iceman)
10월 3, 2021, 11:48오후
3
Hi @JammyDodger
링크 감사합니다.
특정 카테고리에서 특정 사용자의 모든 메시지를 삭제하고 싶은 것뿐입니다.
P.S. 콘솔을 사용하는 건 어떨까요? DB를 날리는 건 원치 않거든요…
비슷한 주제에 대한 논의가 이 토픽에서 진행 중입니다: Delete deleted-posts permanently in bulk?
여기서 영감을 얻을 수 있기를 바랍니다.
부활(네크로) 게시글을 올린 점 사과드립니다. 필요하시면 새 게시글을 작성할 수도 있습니다.
저희에는 정치 카테고리가 있으며, 명백한 이유들로 인해 일부 사용자들이 해당 카테고리에서 자신의 모든 게시글을 삭제하고 싶어 합니다. 이들을 위해 쉽게 이 작업을 수행할 수 있는 방법이 있을까요?
해결 방법 중 하나는 Rais 콘솔을 사용하는 것입니다.
cd /var/discourse
./launcher enter app
rails c
이제 카테고리 슬러그 와 사용자 이름 을 입력하여 아래 양식을 따르세요.
코드를 복사하여 콘솔에 붙여넣으세요.
참고:
토픽이 삭제되지 않도록 첫 번째 게시물을 삭제하지 않습니다.
하위 카테고리를 대상으로 하는 경우, 부모 카테고리를 포함하여 제공해야 합니다. 예: parent_cat_slug/cat_slug.
변경 사항이 적용되기 전에 백업을 수행해 주세요.
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