Update Column Versus Update Attribute

Rails offers a whole variety of methods for making updates to the ActiveRecord objects in your app. Two unique, infrequently-used ones are #update_column and #update_attribute. What is unique about them is that they are both ways of updating a record while skipping the validations defined on the model.

So, how do they differ?

A call to #update_attribute is still going to trigger any callbacks defined on the model and it will touch the update_at column. On the other hand, #update_column can be thought of as a way of directly interacting with the database -- callbacks are skipped and you are truly only touching the specified column, updated_at is left as is.

The docs have this recommendation for #update_attribute:

This is especially useful for boolean flags on existing records.

And for #update_column, they say this:

This is the fastest way to update attributes because it goes straight to the database, but take into account that in consequence the regular update procedures are totally bypassed.

These are both useful in specific situations, but be sure to know their differences and to use them with caution.

Last updated