Here's the shakedown, both essentially do the same thing, they take what's in the ActiveRecord, use the Model and take the information back to the database but there's one very important difference between the two.

Save incorporates all your filters (validates_uniqueness_of etc.) but update does not. So you say, oh pishaw big bloody deal! Well, I'll why this really is a big deal ...

Say you have a Model and a filter


my_models (
id int,
number int,
name varchar(200),
status boolean
)

validates_uniqueness_of :number, :scope=>:status


What this does is, is asserts the uniqueness of the combination of 'number' and 'status'. Yeah, yeah Mr. Fan, Manowar get on with it.

So you have a delete method which goes:


@model=MyModel.find(id)
@model.status=0
@model.save


Now, we assume that there is another entry into the my_models table which has the same 'number' as the entry we're trying to update but a different 'status' say false. And on deletion we're setting this 'status' attribute to false. The point to note is that the save method will fail on the validate_uniqueness_of callback filter, but it will fail silently, and that my men is what introduces a bug.

Use update in scenarios like that, it works out well.

"13, 13, 13,
Steps to nowhere"
Pantera - 13 steps to nowhere