如何在保存时获取更改的值

时间:2012-11-30 00:19:28

标签: ruby-on-rails ruby ruby-on-rails-3 oop

尝试在保存时从对象获取先前的值。想想这种情况:

@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'

任何帮助将不胜感激。

那会非常有帮助

1 个答案:

答案 0 :(得分:5)

ActiveModel包含对“dirty field marking”的支持,该状态会保留更改字段的状态之前和之后。

您可以使用@student.occupation_was获取之前的occupation值和@student.occupation_changed?来获取值是否已更改。

这仅在保存之前有效,因为保存会重置值的更改状态。但是,如果需要在保存记录后使用它,则可以在before_save回调中捕获此数据。您可以通过在#changed_attributes中复制before_save来保留所有更改,例如,然后查询它们。