On Aug 26, 3:56 pm, Adriano Nagel <a...@safira.com> wrote:
> 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

Is entry a member of the entries collection ? If so then the docs on
associations state

"All unsaved (new_record? == true) members of the collection are
automatically saved when the parent is saved."
ie when you call feed.save! unsaved association members are saved.

Fred

>   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,
>
> --
> Adriano
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Talk" group.
To post to this group, send email to rubyonrails-talk@googlegroups.com
To unsubscribe from this group, send email to 
rubyonrails-talk+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to