Hi,
I'm a bit puzzled with an ActiveRecord::StatementInvalid exception that's apparently being thrown twice.
I'm using Rails 2.3.3 and Postgres, and inside the Feed Model I have something like:
has_many :entries, :dependent => :delete_all
def process_feed ... process_feed_entries # log saving feed save! # will fail if an exception is thrown below end
def process_feed_entries ... begin # log saving entry entry.save! # can fail because of duplicate key values rescue ActiveRecord::StatementInvalid => e # log exception caught # log the error in the db (Log Model) end end
DB log:
* Saving entry BEGIN PGError: ERROR: duplicate key value ... : INSERT INTO "entries" ... ROLLBACK * Exception caught BEGIN INSERT INTO "logs" ... COMMIT * Saving feed BEGIN UPDATE "feeds" ... PGError: ERROR: duplicate key value ... : INSERT INTO "entries" ROLLBACK ActiveRecord::StatementInvalid: PGError: ERROR: duplicate key ... Stack trace
The last exception that terminates execution was (or should have been) caught inside the begin/rescue block. Why is it thrown again when the feed is saved, if the transaction was rolled back?
Any hints much appreciated!
Thanks,