23

我在脚本/控制台中犯了一个令人难以置信的可怕错误:

user.delete

有没有办法在同一个脚本/控制台会话中撤消它?

4

3 回答 3

24

好吧,如果您仍然可以访问已删除的记录,您可以像这样创建一个新副本

User.new(user.attributes_hash).save

这只会创建一个具有完全相同属性的用户(是的,也是 id)并将其保存到数据库中。我用它来撤消使用闪光灯的破坏动作。

警告。如果您使用了该User#destroy方法并且您的模型与dependent: :destroyor有关系dependent: :delete,那么那些依赖记录(如果在执行命令时存在)将丢失。当然,除非您对已删除/销毁的记录有活动引用,即变量。

于 2014-11-22T16:55:49.513 回答
19

我也不知道有什么办法,你的 shell 历史中可能仍然有这些信息。(只需向上滚动直到您执行user.delete)。您可以手动恢复用户实例,如果您有依赖项/关联,这会变得很棘手。

对于未来:您可能希望通过以下方式以沙盒模式启动控制台:

rails console -s

关闭后,所有更改都将回滚。

编辑:请查看Arne L.'s Answer如果对象仍然可用,它显示了一种将用户保存到数据库的方法。这比我建议的要好得多(“手动恢复用户”)。

于 2012-08-14T12:16:24.880 回答
4

抱歉不行。除非您使用像 Papertrail 这样的 gem 来保存您的更改历史记录,否则记录就消失了。

于 2012-08-14T03:10:25.463 回答