我在脚本/控制台中犯了一个令人难以置信的可怕错误:
user.delete
有没有办法在同一个脚本/控制台会话中撤消它?
答案 0 :(得分:22)
好吧,如果你仍然可以访问已删除的记录,你可以创建一个像这样的新副本
User.new(user.attributes_hash).save
这将只创建一个具有 exaxt相同属性的用户(是的,也是id)并将其保存到DB。我使用它来使用闪光灯撤消破坏动作。
警告。如果您使用了User#destroy
方法并且您的模型与dependent: :destroy
或dependent: :delete
有关系,那么那些相关记录 - 如果在执行时存在命令 - 将丢失。当然,除非您对已删除/已销毁的记录有活动的引用,即变量。
答案 1 :(得分:19)
我也不知道某种方式,您可能仍然拥有shell历史记录中的信息。 (向上滚动直到你执行user.delete
)。您可以手动还原用户实例,如果您有依赖关系/关联,这会变得棘手。
对于未来:您可能希望通过以下方式在沙盒模式下启动控制台:
rails console -s
关闭后,所有更改都将回滚。
编辑:请查看Arne L.'s Answer ,如果对象仍然可用,则会显示将用户保存到数据库的方法。这比我提出的要好得多(“手动恢复用户”)。
答案 2 :(得分:4)
不幸的是,没有。除非你使用像Papertrail这样的宝石来记录你的变化,否则记录就会消失。