No estoy seguro de si es lo ideal, pero usé este código para reemplazar el contenido de las publicaciones del usuario en temas eliminados con "[deleted]". De esta manera se preservó la existencia de las publicaciones y pareció más seguro que destruirlas por completo.
# respaldado primero
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` para verificar
ps.each do |p|
p.raw = '[deleted]'
p.save
end