如何使用 Rails 控制台恢复已删除的主题

This is how the accidental deletion occurred:

cd /var/discourse
./launcher enter app
rails c
Topic.where(:id=><id>).destroy_all

The <id> I deleted was the wrong one and of course it just so happened to be a topic that a number of users were tuned into it. The important thing is I stopped, did not panic and did not execute another action after the accidental deletion occurred.

:stop_sign: Stop, :no_entry_sign: Do Not Panic and :no_entry_sign: Do Not Execute

How I recovered the accidentally deleted topic using the rails console:

destroyed_topic = _  
destroyed_topic.each do |destroyed_record|
  Topic.create(destroyed_record.attributes)
end

For future reference are there other ways could I have achieved this? If so, how?

很难给这件事设定一个时间限制,但 destroy 确实应该保留给绝对确认无误的情况。请先进行备份。我不确定你的恢复操作是否会级联并返回你所需的所有记录。

替代方案:

Topic.find_by(id: <id>).trash!

恢复方法:

Topic.with_deleted.where(id: <id>).recover!