首页 文章

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

提问于
浏览
91

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

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

before_save object
  do_something_with object.original_name
end

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

4 回答

  • 8

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

  • 4

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

  • 233

    看看rails文档

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

    Model.attribute_was返回上一个值:D

  • 4

    对于轨道5.1

    追踪 _was 在rails 5.1中已弃用,现在您应该追加 _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

相关问题