无论如何撤消rails控制台中的activerecord删除?

时间:2012-08-14 03:04:09

标签: ruby-on-rails rails-activerecord

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

user.delete

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

3 个答案:

答案 0 :(得分:22)

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

User.new(user.attributes_hash).save

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

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

答案 1 :(得分:19)

我也不知道某种方式,您可能仍然拥有shell历史记录中的信息。 (向上滚动直到你执行user.delete)。您可以手动还原用户实例,如果您有依赖关系/关联,这会变得棘手。

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

rails console -s

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

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

答案 2 :(得分:4)

不幸的是,没有。除非你使用像Papertrail这样的宝石来记录你的变化,否则记录就会消失。