1
0
mirror of https://github.com/jbranchaud/til synced 2026-01-03 07:08:01 +00:00

Add Inspect Previous Changes To ActiveRecord Object as a rails til

This commit is contained in:
jbranchaud
2020-08-27 20:28:47 -05:00
parent 613fc5da06
commit 04ab027f24
2 changed files with 35 additions and 1 deletions

View File

@@ -9,7 +9,7 @@ and pairing with smart people at Hashrocket.
For a steady stream of TILs, [sign up for my newsletter](https://tinyletter.com/jbranchaud).
_949 TILs and counting..._
_950 TILs and counting..._
---
@@ -589,6 +589,7 @@ _949 TILs and counting..._
- [Get The Column Names For A Model](rails/get-the-column-names-for-a-model.md)
- [Hash Slicing](rails/hash-slicing.md)
- [Ignore Poltergeist JavaScript Errors](rails/ignore-poltergeist-javascript-errors.md)
- [Inspect Previous Changes To ActiveRecord Object](rails/inspect-previous-changes-to-activerecord-object.md)
- [List The Enqueued Jobs](rails/list-the-enqueued-jobs.md)
- [Log SQL Queries Executed By ActiveRecord](rails/log-sql-queries-executed-by-activerecord.md)
- [Mark A Migration As Irreversible](rails/mark-a-migration-as-irreversible.md)

View File

@@ -0,0 +1,33 @@
# Inspect Previous Changes To ActiveRecord Object
If you modify an ActiveRecord object, before saving it, you can inspect changes
with methods like `changed?` and `<attr>_changed?`:
```ruby
book.title = "The Fifth Season"
book.changed? #=> true
book.title_changed? #=> true
book.publication_year_changed? #=> false
book.changes
#=> { "title" => ["Original Title", "The Fifth Season"] }
```
After saving an object, it will no longer be in a _dirty_ state and these
methods will have no _changes_ to return.
If you have a reference to the saved ActiveRecord object, you can look at the
_previous_ changes with methods like `previous_changes` and
`<attr>_previously_changed?`:
```ruby
book.title = "The Fifth Season"
book.save
book.title_previously_changed? #=> true
book.previous_changes
#=> { "title" => ["Original Title", "The Fifth Season"] }
```
[source](https://api.rubyonrails.org/classes/ActiveModel/Dirty.html)