How to restart AR transaction?

under
“Exception handling and rolling back” says that “One should restart the
entire transaction if an ActiveRecord::StatementInvalid occurred.
” My
question is how? I tried wrapping the statements in two separate
transaction block but that still doesn’t work.

I have something like:
self.transaction do
bar = create!(params) rescue nil
end
unless bar
self.transaction do
bar = find_or_initialize_by(foo: foo)
bar.update(params)
end

end

and PG would still complain about it with “PG::Error: ERROR: current
transaction is aborted, commands ignored until end of transaction
block”.
So my question is whether there is a proper way of restarting the
transaction? Thanks!

Ken

On Jun 3, 2013, at 9:27 AM, Ken Ip wrote:

and PG would still complain about it with “PG::Error: ERROR: current transaction
is aborted, commands ignored until end of transaction block”. So my question is
whether there is a proper way of restarting the transaction? Thanks!

rollback


Scott R.
[email protected]
http://www.elevated-dev.com/
(303) 722-0567 voice

Thanks for the reply, Scott. Can you show me how? I’ve tried per
thishttp://api.rubyonrails.org/classes/ActiveRecord/Rollback.html but
it still doesn’t work.

self.transaction do
bar = create(params) rescue nil
raise ActiveRecord::Rollback unless bar
end
unless bar
self.transaction do
bar = find_or_initialize_by(foo: foo)
bar.update(params)
end

end

Look at the actual SQL in the logs.

On Jun 3, 2013, at 9:01 PM, Ken Ip wrote:

bar.update(params)


You received this message because you are subscribed to the Google G. “Ruby
on Rails: Talk” group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/rubyonrails-talk/df6adad0-6740-400a-8771-f034d54452fe%40googlegroups.com?hl=en-US.
For more options, visit https://groups.google.com/groups/opt_out.


Scott R.
[email protected]
http://www.elevated-dev.com/
(303) 722-0567 voice