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