I have a method in a service object that composes operations that should be wrapped in a transaction. Some of these operations are also wrapped in transactions. For example:
Throwing a custom error is always a good option in case of nested transactions. Please find more detail on nested-transations-in-rails .