Transactions
Transactions ensure multiple database operations succeed or fail together, maintaining data consistency.
Basic Transactions
AppDB.transaction do
user = User.create!(name: "Alice", email: "alice@example.com")
profile = UserProfile.create!(user_id: user.id, bio: "Hello!")
# Both records saved, or neither is saved
endAutomatic Rollback
If an exception is raised inside a transaction, all changes are rolled back:
AppDB.transaction do
User.create!(name: "Alice", email: "alice@example.com")
raise "Something went wrong!"
# User is NOT saved - transaction rolled back
endManual Rollback
Explicitly rollback a transaction:
Nested Transactions (Savepoints)
Nest transactions using savepoints for partial rollback:
Transaction Return Values
Transactions return the value of the last expression:
Using with Azu Endpoints
Multi-Model Operations
Transaction Isolation
Configure isolation level for specific requirements:
Error Handling Patterns
Retry on Conflict
Conditional Commit
Best Practices
Keep transactions short: Long transactions hold locks and reduce concurrency
Avoid external calls: Don't make HTTP requests inside transactions
Handle exceptions: Always rescue and handle transaction failures gracefully
Use savepoints sparingly: They add overhead; prefer flat transactions when possible
Test rollback behavior: Ensure your application handles rollbacks correctly
Next Steps
Last updated
Was this helpful?
