Je ne suis pas sûr que ce soit idéal, mais j’ai utilisé ce code pour remplacer le contenu des publications de l’utilisateur dans les sujets supprimés par "[deleted]"". De cette façon, l’existence des publications a été préservée, et cela semblait plus sûr que de les détruire complètement.
# sauvegarde préalable
deleted_topic_id = 1234
user_id = 5678
t = Topic.unscoped.find(deleted_topic_id)
ps = t.posts.select { |p| p.user_id == user_id }
# `ps.count` pour vérifier
ps.each do |p|
p.raw = '[deleted]'
p.save
end