On Wednesday, February 20, 2013 2:51:49 AM UTC, Ruby-Forum.com User
wrote:>
> I''m creating an ActiveRecord object A and want to update object B
during
> the process even if the creation of object A is rolled back due to a
> before_create callback returning false.
>
> Is there a way for me to do this?
>
> It seems that once you''re in the ActiveRecord callback chain your
DB
> updates will be rolled back unless the entire callback chain returns
> true.
>
> Another way to look at this: I need to track all ActiveRecord
"create"
> attempts but it seems that I''m unable to use callbacks or
observers to
> do this since both are referenced within the ActiveRecord callback
> chain.
>
> How would you go about doing this?
>
I wouldn''t claim that this is a good idea (and I expect it would
violate
most peoples expectations about all aspects of the save rolling back if a
callback returns false but...
Database connections and hence transactions happen on a per thread basis,
therefore if you create a separate thread and create B it is created using
a separate database connection and won''t be affected by the rollback of
the
main save. This could be quite simple:
Thread.new do
B.create
end.join
Will run that second thread and wait until it exits before continuing.
Watch out for cross thread exception handling and make sure that B.create
isn''t going to do anything thread dangerous.
Fred
> Thanks for the help!
>
> --
> Posted via http://www.ruby-forum.com/.
>
--
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-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org
To post to this group, send email to
rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org
To view this discussion on the web visit
https://groups.google.com/d/msg/rubyonrails-talk/-/XvCmbrAy2CAJ.
For more options, visit https://groups.google.com/groups/opt_out.