is there a way to get the original value that an ActiveRecord attribute (=the value that was loaded from the database)?
I want something like this in an observer
before_save object
do_something_with object.original_name
end
The task is to remove the object from a hash table (in fact, move it to another key in the table) upon updating.
Appending _was
to your attribute will give you the previous value.
Copied from Lucas Andrade's answer below: https://stackoverflow.com/a/50973808/9359123
Appending _was
is deprecated in rails 5.1, now you should append _before_last_save
Something like:
before_save object
do_something_with object.name_before_last_save
end
Will return the name value before your last save at database (works for save and create)
The difference between _was
and _before_last_save
according to the documentation:
_was source from docs
def attribute_was(attr)
attribute_changed?(attr) ? changed_attributes[attr] : __send__(attr)
end
_before_last_save source from docs
def attribute_before_last_save(attr_name)
mutations_before_last_save.original_value(attr_name)
end