Dirty
跟踪对象的变化情况。其实,它们都属于脏数据,所以起这名字。但有时候很有用,例如某个字段一经生成不允许更改,或者某字段每次更改要确保与上次不同。
使用 ActiveModel::Dirty,需要:
include ActiveModel::Dirty
调用
define_attribute_methods参数是你想跟踪的属性在改变属性的值之前,调用
attr_name_will_change!(把 attr_name 换成真正的属性名)在改变属性的值之后,调用
changes_applied
举例:
class Person
include ActiveModel::Dirty
define_attribute_methods :name
def name
@name
end
def name=(val)
name_will_change! unless val == @name
@name = val
end
def save
# do persistence work
changes_applied
end
def reload!
# reset_changes
end
end运用 Attribute Methods 生成的方法,能精确跟踪到某属性:
下面是对它们的解释
除上述方法外,还有
Active Record 也有同名模块,它只是对这里的 Dirty 的封装,并且它并没有对外提供 API.
最后更新于
这有帮助吗?