hello all I have one form.. which provide data to three tables, 3 Models. i am trying to setup a transaction for save statement. seems like i am missing something.. as this is not working properly. following is my code: User.transaction do @user = User.new(params[:user]) @user.save @user_details = UserDetail.new(params[:user_detail]) @user_details.user_id = @user.id @user_details.save @user_tree = UserTree.new() @user_tree.user_id = @user.id @user_tree.save end if something goes wrong then User table is not creating new row but other two tables get new rows. any suggestions. Thanks in advance Ajit --~--~---------~--~----~------------~-------~--~----~ 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-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Depending on the nature of your relationships you might be able to do this (which has automatic transaction wrapping on the DB): @user = User.new(params[:user]) @user.build_user_detail(params[:user_detail]) @user.build_user_tree @user.save If either UserDetail or UserTree uses a has_many relationship then you can use @user.user_xxxs.build(params[:user_xxx]) On Jun 16, 11:35 am, Ajit <ajitscor...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> hello all > > I have one form.. which provide data to three tables, 3 Models. i am > trying to setup a transaction for save statement. seems like i am > missing something.. as this is not working properly. following is my > code: > > User.transaction do > @user = User.new(params[:user]) > > @user.save > > @user_details = UserDetail.new(params[:user_detail]) > @user_details.user_id = @user.id > @user_details.save > > @user_tree = UserTree.new() > @user_tree.user_id = @user.id > @user_tree.save > end > > if something goes wrong then User table is not creating new row but > other two tables get new rows. > > any suggestions. > > Thanks in advance > > Ajit--~--~---------~--~----~------------~-------~--~----~ 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-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
On 16 Jun 2008, at 16:35, Ajit wrote:> > User.transaction do > @user = User.new(params[:user]) > > @user.save > > @user_details = UserDetail.new(params[:user_detail]) > @user_details.user_id = @user.id > @user_details.save > > @user_tree = UserTree.new() > @user_tree.user_id = @user.id > @user_tree.save > end > > if something goes wrong then User table is not creating new row but > other two tables get new rows.What are you expecting to happen? are you expecting this to rollback if @user.save fails? Rollback only happens if an exception is thrown, and save just returns false if validation fails. save! on the other hand throws an exception when validation fails Fred> > > any suggestions. > > Thanks in advance > > Ajit > >--~--~---------~--~----~------------~-------~--~----~ 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-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---