title: Rollback everything if method within transaction fails
body: <p>I have a set of inserts and updates that all need to be rolled back if any of them fail. A good portion of these updates and inserts are abstracted out so they can be reused. When I start a transaction, then call the method to kick off the abstracted inserts, the failure isn't sent up to the original transaction block - it just commits everything before that method </p>
  
  <pre><code>    def decline_check
          Check.transaction do
              # Set default updates, then a voided date if the check has already been printed.
              check_attributes = {:status =&gt; 'Voided', :status_date =&gt; Time.now.strftime('%Y-%m-%d')}
              check_attributes[:voided_date] = Time.now.strftime('%Y-%m-%d') if check.status == "Printed"
  
              # Update check status
              check.update_attributes!(check_attributes)
  
              decline(current_user)
          end
      end
  
  private
  
      def decline current_user
          # execute some insert  here that fails
      end
  </code></pre>
  
  <p>How can I get the a rollback in <code>decline</code> to trigger a rollback in <code>decline_check</code>?</p>