Dirty objects
Dirty Objects功能可以追踪Model的属性是否有改变:
person = Person.find_by_name('Uncle Bob')
person.changed? # => false 没有改变任何值
# 让我们来改一些值
person.name = 'Bob'
person.changed? # => true 有改变
person.name_changed? # => true 这个属性有改变
person.name_was # => 'Uncle Bob' 改变之前的值
person.name_change # => ['Uncle Bob', 'Bob']
person.name = 'Bill'
person.name_change # => ['Uncle Bob', 'Bill']
# 储存进资料库
person.save
person.changed? # => false
person.name_changed? # => false
# 看看哪些属性改变了
person.name = 'Bob'
person.changed # => ['name']
person.changes # => { 'name' => ['Bill', 'Bob'] }
什么时候会用到这个功能呢?通常是在储存进资料库前的回呼、验证或Observer中,你想根据修改了什么来做些动作,这时候Dirty
Objects功能就派上用场了。