Using topic.destroy(id) to delete illegal content


(Vikas Kedia) #1

My goal was to delete a topic from the DB due to legal reasons.

so I ran the command:

root@he-ps09-superstars:/var/www/discourse# echo “Topic.destroy(id)” | rails c

The topic was deleted :+1:

The category still thinks there is 1 topic and I cannot delete the category.


(Mittineague) #2

What other tables cross index the topic id?
Did you delete those rows as well?
What other tables cross index fields in those other tables?
Did you delete those rows?
rinse - repeat - until all are deleted.

IMHO it is much safer and a lot simpler to “delete” a topic using the UI than to delete it from the database.

AFAIK there is no “on delete cascade” code in Core and deleting fields from tables is not a supported practice, and hence not a Bug.


(Vikas Kedia) #3

I am not touching postgres. I am letting the code do its work

As per @sam at: How to permanent delete a topic from database (with his posts)? this may nuke dependent objects.


(Mittineague) #4

Yes, but


(Vikas Kedia) #5

hahaha !! that post was written in 2014 i think there might have been improvments after that …

Someone posted questionable content … hence just a soft delete just does not work.

Though I completely get @codinghorror point that there should not be hard delete in the UI. Since that creates a lot of possibilities for mischief.

Here is the code for topic.destroy discourse/topics_controller.rb at 5f19ad95074329bea3328a796f061de79db9c227 · discourse/discourse · GitHub this does seem to call PostDestroyer