尝试在保存时从对象获取先前的值。想想这种情况:
@object = {:name => 'Dan', :occupation => 'student'} @object[:occupation] = 'Full time employee' @object.value_was[:occupation] # => 'student'
我希望没有方法value_was
是可以理解的。更多我想在模型对象上做同样的事情:
@student = Student.find(1) @student.occupation = 'Full time employee' @student.save @student.value_was(:occupation) # => 'student'
任何帮助将不胜感激。
那会非常有帮助
答案 0 :(得分:5)
ActiveModel包含对“dirty field marking”的支持,该状态会保留更改字段的状态之前和之后。
您可以使用@student.occupation_was
获取之前的occupation
值和@student.occupation_changed?
来获取值是否已更改。
这仅在保存之前有效,因为保存会重置值的更改状态。但是,如果需要在保存记录后使用它,则可以在before_save回调中捕获此数据。您可以通过在#changed_attributes
中复制before_save
来保留所有更改,例如,然后查询它们。