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!