Rollback error message

I trying transactions for the first time and trying to figure out the
best (DRY?) way to get the error message outside the transaction block.

If in a controller if I have
def create
  Memo.transaction do
    @memo = Memo.new(params[:memo]) # polymorphic build
    @resource = @memo.memoble # get parent
    @resource.create_memo(@memo) # saves memo and updates parent fields
  end
  ...
  #how do I check if there was a rollback so I can redirect based on
pass fail?
end

In the parents model I have

def create_memo
  #does stuff and if there is an error not in validations
  ...
  raise ActiveRecord::Rollback, 'Memo was NOT created. Payment exceeds
balance due'
  ...
end

I had create_memo return nil or error message and raised the exception
in the controller, but that does not seem to be the best way - but it
works.

The basic question is "How do I tell if a transaction was committed or
rolled back?"

Steve

If I were you I wouldn't raise ActiveRecord::Rollback (which
transaction swallows silently). I'd raise my own exception class, it
will still cause the transaction to be rolled back but the exception
will continue upwards and you can then rescue it in your controller,
outside the transaction block and take whatever action is appropriate
to the app

Fred

def create_memo
#does stuff and if there is an error not in validations
...
raise ActiveRecord::Rollback, 'Memo was NOT created. Payment exceeds
balance due'
...
end
Steve

I am guessing that you are planning on using later on the message that
you are raising. Why not just add the error to your memo object errors
and then check in your controller if your memo.errors is empty or not?

pepe

pepe wrote in post #960118:

I am guessing that you are planning on using later on the message that
you are raising. Why not just add the error to your memo object errors
and then check in your controller if your memo.errors is empty or not?

pepe

Thanks for both suggestion. Again, first time I've tried transactions
and there is a lot of "I didn't know you could do that!".

I tried

raise ActiveRecord::Rollback, 'Memo was NOT created. Payment exceeds

because that was the example in the rdoc. I did read that if would just
eat the exception.

Never did my own exception, but will sure to go that path.

Didn't know you could add errors to the object. I know now more than I
did yesterday.

Steve