Class | ActiveRecord::Rollback
In: | lib/active_record/base.rb
Parent: | ActiveRecordError

ActiveRecord::Transactions::ClassMethods.transaction uses this exception to distinguish a deliberate rollback from other exceptional situations. Normally, raising an exception will cause the `transaction` method to rollback the database transaction and pass on the exception. But if you raise an ActiveRecord::Rollback exception, then the database transaction will be rolled back, without passing on the exception.

For example, you could do this in your controller to rollback a transaction:

      class BooksController < ActionController::Base
        def create
          Book.transaction do
            book = Book.new(params[:book])
            book.save!
            if today_is_friday?
              # The system must fail on Friday so that our support department
              # won't be out of job. We silently rollback this transaction
              # without telling the user.
              raise ActiveRecord::Rollback, "Call tech support!"
            end
          end
          # ActiveRecord::Rollback is the only exception that won't be passed on
          # by ActiveRecord::Base.transaction, so this line will still be reached
          # even on Friday.
          redirect_to root_url
        end
      end

[Validate]