ruby-on-rails – 如何恢复/撤消对Activerecord对象的本地更改?

有没有办法撤销/恢复Activerecord对象的任何本地更改.例如:
user = User.first
user.name # "Fred"
user.name = "Sam"
user.name_was # "Fred"

user.revert
user.name # "Fred"

我知道我可以做user.reload,但我不应该打数据库来做这个,因为旧的值存储在对象的状态.

优选地,Rails 3溶液.

解决方法

您可以循环浏览“更改”并重置它们.可能有一种方法可以做到这一点,但是我没有看到.
> c = Course.first
> c.name
=> "Athabasca Country Club"
> c.name = "Foo Bar"
=> "Foo Bar"
> c.changes
=> {"name"=>["Athabasca Country Club","Foo Bar"]}
> c.changes.each {|k,vs| c[k] = vs.first}
> c.name
=> "Athabasca Country Club"

其实看起来有一个“name_reset!”你可以调用方法

> c.changes.each {|k,vs| c.send("#{k}_reset!")}

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...