FYI.  It appears there is a ticket on this issue

https://rails.lighthouseapp.com/projects/8994/tickets/2991-after-transaction-patch

On Sep 25, 4:31 pm, Tony Primerano <[email protected]> wrote:
> On Sep 25, 3:44 pm, Jeff <[email protected]> wrote:
>
> > On Sep 25, 2:05 pm, Tony <[email protected]> wrote:
>
> > > I suspect there is a standard way to handle this issue but I haven't
> > > found it.
>
> > > In my controller create action I have a Transaction.  Lets say I'm
> > > creating a user object here.
>
> > > def new
> > >   User.transaction do
> > >       @user = User.new(params[:user])
> > >      #do some stuff  set success if no rollback
> > >   end
> > >   if success
> > >    goto success page
> > >   else
> > >     render :action => :new
> > >   end
> > > end
>
> > > Now the problem here is when new is rendered @user has an id and it
> > > treats it as an edit instead of a new.
>
> > That means you saved @user to the database, which you shouldn't be
> > doing in a new action.  The create action is for saving to the
> > database.
>
> I didn't save on the new action.   The user did a create and after
> writing to the database there was an issue so I aborted the
> transaction and sent the user back to the new form (this is the
> standard practice when there is an error on create).
>
> My issue is that my objects now have bogus IDs in them causing the
> view to treat the object as created.
>
> To get around this I now recreate all my objects from the params and
> run valid? before rendering the new form so any errors will appear (I
> guess the save would have failed if there were errors on the objects
> themselves so calling valid is probably not needed).
>
> > Jeff
> > purpleworkshops.com
>
> > > I could do a the following in the fail block
> > > @user = User.new(params[:user])
> > > render :action => :new
>
> > > but the errors are lost (and any changes or associations i created)
>
> > > Or I could nil out the id
> > > @user.id = nil
> > > render :action => :new
>
> > > It would be nice if the rollback did this for me (sort of like Object
> > > Transactions used to but without wiping out the errors and other
> > > information)?  In my case User has many addresses and many orders so I
> > > also need to check and nil their IDs.  yuck.
>
> > > What's the best practice here?
>
> > > Tony
>
>
--~--~---------~--~----~------------~-------~--~----~
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 [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to