Transaction blocks and error handling

I have a question about transaction blocks and error handling.

I have an big_object that has an array of other_objects.

So i’m updating these objects from user input and i wrap the whole
thing in a transaction, go through each of the objects verify they are
valid and then save them if they are if they aren’t rollback
transaction and jump back to the page and let the user correct their
mistake.

#something like…
ActiveRecord::Base.transaction do
#update big_object
for other_objects in big_object do |other_object|
#update other_object
unless other_object.valid?
#oops! looks like my input validations are bad, abort!
raise ActiveRecord::Rollback
end
end
big_object.save!
end

So when i roll back, i throw it back to the page and give the user
some feed back and a chance to correct their mistake. The problem is
the object is in a bad state here, it thinks it is saved. So the
second time my update function is run it goes through says “hey this
time everything is awesome, lets save” and nothing gets saved to the
database.
I know transactions don’t rollback the @objects that are inside of
them, any suggestions for got error handling in this situation?