【发布时间】:2014-11-06 12:14:15
【问题描述】:
我知道要检查模型是否已更改,可以使用:
instance.changed?
还要检查一个属性是否发生了变化:
instance.attr_changed?
但是我们如何确定哪个属性发生了变化?有没有一种方法可以让我们一个一个地遍历所有属性,并以某种方式确定哪个属性发生了变化?
【问题讨论】:
标签: ruby-on-rails
我知道要检查模型是否已更改,可以使用:
instance.changed?
还要检查一个属性是否发生了变化:
instance.attr_changed?
但是我们如何确定哪个属性发生了变化?有没有一种方法可以让我们一个一个地遍历所有属性,并以某种方式确定哪个属性发生了变化?
【问题讨论】:
标签: ruby-on-rails
你可以很容易地使用:
instance.changed_attributes
或
instance.changed
第一个会给你哈希{"attribute" => "value before change"}。
第二个返回更改的属性名称数组:["name of changed attribute"]。
【讨论】:
changed:changed_attributes.present?、changed?:changed_attributes.keys 和 changed_attributes:@changed_attributes ||= ... 的实现。因此 - 除非你真的不可能改变 AR 的行为。