Ethan Ethan - 3 months ago 5
Ruby Question

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

If you have DB columns

Rails will automatically set those values when you create and update a model object. Is there a way to save the model without touching those columns?

I am bringing in some legacy data and I would like to set those values from the corresponding values in the (differently named) legacy data fields. I'm finding when I set them on the model and then save the model, Rails appears to override the incoming values.

Of course I could just name the Rails model columns differently to prevent that, but after the data is imported, I want Rails to do its automatic timestamp thing.


Do this in a migration or in a rake task (or in the new database seeds if you're on edge rails):

ActiveRecord::Base.record_timestamps = false
  ActiveRecord::Base.record_timestamps = true  # don't forget to enable it again!

You can safely set created_at and updated_at manually, Rails won't complain.

Note: This also works on individual models, e.g. User.record_timestamps = false