Touch
updated_at
by default with calls toupdate_all
andupdate_column(s)
Add this gem to the project Gemfile
.
gem "active_record-updated_at"
The default ActiveRecord
behavior does not touch updated_at
when the following are called:
ActiveRecord::Base#update_column
ActiveRecord::Base#update_columns
ActiveRecord::Relation#update_all
We rarely ever have a case to modify data WITHOUT touching updated_at
so this gem enables the touching behavior by default. For those rare occasions that we don't want the touching we can wrap these calls in a disable
block explicitly:
ActiveRecord::UpdatedAt.disable { User.update_all(role: "member") }
If updated_at
is explicitly specified then the UPDATE query is not modified.
# This touches `updated_at` with `Time.current`
User.update_all(role: "member")
# This sets `updated_at` to `1.day.ago`
User.update_all(role: "member", updated_at: 1.day.ago)
# This sets `updated_at` to `NULL`
User.update_all(role: "member", updated_at: nil)
# This doesn't touch `updated_at`
ActiveRecord::UpdatedAt.disable { User.update_all(role: "member") }
bundle exec rspec
MIT - Copyright © 2016 LendingHome