rails 数据变化的监控

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'] }

注意到Model资料一旦储存进资料库,追踪记录就重算消失了。

什么时候会用到这个功能呢?通常是在储存进资料库前的回呼、验证或Observer中,你想根据修改了什么来做些动作,这时候Dirty

 Objects功能就派上用场了。

你可能感兴趣的:(rails 数据变化的监控)