How to restart AR transaction?

143 views
Skip to first unread message

Ken Ip

unread,
Jun 3, 2013, 11:27:28 AM6/3/13
to rubyonra...@googlegroups.com

http://edgeapi.rubyonrails.org/classes/ActiveRecord/Transactions/ClassMethods.html 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


Scott Ribe

unread,
Jun 3, 2013, 11:57:21 AM6/3/13
to rubyonra...@googlegroups.com
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 Ribe
scott...@elevated-dev.com
http://www.elevated-dev.com/
(303) 722-0567 voice




Ken Ip

unread,
Jun 3, 2013, 11:01:24 PM6/3/13
to rubyonra...@googlegroups.com
Thanks for the reply, Scott. Can you show me how? I've tried per this 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

Scott Ribe

unread,
Jun 25, 2013, 11:42:24 AM6/25/13
to rubyonra...@googlegroups.com
Look at the actual SQL in the logs.
> --
> You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group.
> To unsubscribe from this group and stop receiving emails from it, send an email to rubyonrails-ta...@googlegroups.com.
> To post to this group, send email to rubyonra...@googlegroups.com.
> 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.
Reply all
Reply to author
Forward
0 new messages