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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With