如何在Rails中获取属性的原始值

时间:2009-09-28 15:03:20

标签: ruby-on-rails activerecord

有没有办法获得ActiveRecord属性的原始值(=从数据库加载的值)?

我想在观察者中找到这样的东西

before_save object
  do_something_with object.original_name
end

任务是在更新时从哈希表中删除对象(事实上,将其移动到表中的另一个键)。

4 个答案:

答案 0 :(得分:237)

_was附加到您的属性将为您提供之前的值。

答案 1 :(得分:8)

ActiveRecord的attributes_before_type_cast方法在进行类型转换和反序列化之前返回属性的哈希值。

答案 2 :(得分:6)

对于Rails 5.1 +

在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)

查看rails文档

http://api.rubyonrails.org/classes/ActiveModel/Dirty.html

Model.attribute_was返回上一个值:D