About callbacks: after_update

You don't need to call save at all: update_attributes automatically
saves the record.

Jeff
softiesonrails.com

Thanks Jeff.
update_attribues(params[:my_object]) automatically saves the updated
params in the previous view but there are modifications that doesn't
come directly from the previous view. For instance, I keep track of
who
did the last modification or release the database record once it is
recorded.

if my_object.update_attributes(params[:my:object]) # after_update is
called
   my_object.last_editor = current_user
   my_object.locked = false
   my_object.save! # after_update is called again
end

Any tip? Is there a way o keep all the modifications in memory and to
save it all at the same time? Thanks

update_attributes just does attributes= and then saves so you could dp

my_object.last_editor = current_user
my_object.locked = false
my_object.update_attributes(params[:my:object])

or

my_object.attributes = params[:my:object]
if my_object.valid?
    my_object.last_editor = current_user
    my_object.locked = false
    my_object.save! # after_update is called again
end

if you're fussed about only setting locked/last_editor if the
attributes given were valid.

Fred

You can still use mass assignment, just change your logic a bit

@foo = Foo.find(params[:id]

@foo.attributes = params[:foo] # instead of update_attributes

if @foo.valid?

@my_object.last_editor = current_user
@my_object.locked = false

save!

end

However, if it were me… I’d make a model method

(in your model)

Saves the record by assigning fields

Requires you to pass the attributes, a user object, and a boolean