How to update a single attribute without touching the updated_at attribute?

Is there a way to avoid automatically updating Rails timestamp fields?

Or closer to your question:

http://blog.bigbinary.com/2009/01/21/override-automatic-timestamp-in-activerecord-rails.html


If all you're wanting to do is increment a counter, I'd use the increment_counter method instead:

ModelName.increment_counter :pagehit, id

As an alternative to update_attribute, In Rails 3.1+ you can use update_column.

update_attribute skips validations, but will touch updated_at and execute callbacks.

update_column skips validations, does not touch updated_at, and does not execute callbacks.

Thus, update_column is a great choice if you don't want to affect updated_at and don't need callbacks.

See http://api.rubyonrails.org/classes/ActiveRecord/Persistence.html for more information.

Also note that update_column will update the value of the attribute in the in-memory model and it won't be marked as dirty. For example:

p = Person.new(:name => "Nathan")
p.save
p.update_column(:name, "Andrew")
p.name == "Andrew" # True
p.name_changed? # False