有没有办法获得ActiveRecord属性的原始值(=从数据库加载的值)?
我想在观察者中找到这样的东西
before_save object
do_something_with object.original_name
end
任务是在更新时从哈希表中删除对象(事实上,将其移动到表中的另一个键)。
答案 0 :(得分:237)
将_was
附加到您的属性将为您提供之前的值。
答案 1 :(得分:8)
ActiveRecord的attributes_before_type_cast
方法在进行类型转换和反序列化之前返回属性的哈希值。
答案 2 :(得分:6)
在Rails 5.1中不赞成添加_was
,现在您应该追加_before_last_save
类似的东西:
before_save object
do_something_with object.name_before_last_save
end
将返回上一次保存到数据库之前的名称值(可保存和创建)
根据文档,_was
和_before_last_save
之间的区别:
_was 来源from docs
def attribute_was(attr)
attribute_changed?(attr) ? changed_attributes[attr] : __send__(attr)
end
_before_last_save 来源from docs
def attribute_before_last_save(attr_name)
mutations_before_last_save.original_value(attr_name)
end
您可以看到一个更好的示例here
答案 3 :(得分:4)