I think I’m seeing the behavior specified in this post to Rails-core:
I believe that this post is an example of the behavior I’ll describe as
I’d like to verify the following assertion:
Assertion: Within a transaction block, a rollback will not occur
automatically unless an exception is thrown from within that top-level
block explicitly. If there are begin/rescue blocks within the
transaction block that catch exceptions, then the transaction block will
not be able to detect these exceptions and will not rollback.
I’m seeing this on a multi-object update, so I am now using save
(instead of save!) and rollback_db_transaction explicitly by detecting
whether each object’s error array is non-empty.