This is part of the Semicolon&Sons Code Diary - consisting of lessons learned on the job. You're in the rails category.
Last Updated: 2024-11-21
Rails runs after_save
callbacks within a transaction, thus the state changes
you just saved can theoretically be unwound if the transaction fails due to an
exception getting raised within the after_save
functionality. Sometimes this
is what you want. Sometimes it isn't.
Whenever you are dealing with actions that should occur ONLY after you are sure
everything is done (e.g. saving to a special full-text database, tracking,
etc.), you ought to use after_commit
since this gets run after and outside the
transaction.
Note: In some systems after_commit
will entail complications with testing
state management systems which wrap data in a transaction and rollback at the
test.