Self Creating edit page?

Hey,

Apparently today I'm the worst developer ever.

Same form I've been working on for 2 days now. I've slimmed it down now from 4 models to 2 to try and narrow the problem field.

The controller only defines two areas. [new, create]

In my form I have a <%= forms_for :user, @user %> section.

In my controller I have: begin       ActiveRecord::Base.transaction do         @dealer = Dealer.new(params[:dealer])         @dealer.save

        @user = @dealer.users.new(params[:user])         @user.roles << Role.find(3)         @user.save!       end     rescue ActiveRecord::RecordInvalid => invalid       render :controller => 'dealers', :action => 'new'     end

    if ! @dealer.new_record? && ! @user.new_record?       flash[:notice] = "Dealer, User and addresses saved!"       redirect_to root     end

What is now happening is if the dealer parameters are wrong. It throws up validation errors like expected. If the dealer params are correct but the user params are wrong then as exepcted nothing gets saved to the db thanks to the transaction. BUT the page gets rendered as an edit_dealer_id page. with a new hidden field telling the form to submit via put method. And of course that dealer id doesn't exist as it never saved to the db.

How is this even happening. I don't have edit/update controller functions or views. This is just being generated on the fly and is a really big pain. Why wouldn't it just render the correct page like when the dealer params are incorrect. Something has gone horribly wrong somewhere and nothing is working like i'd expect.

Any suggestions would help, cheers, brianp

I dont really unserstand what you're saying. What are you expecting to get rendered, and what is actually getting rendered?

Expecting to get rendered: The same form page I've created at the :new action with the Invalid model notices from my model validations.

What is getting rendered: A form that LOOKS the same, with my Invalid model notices but now does not POST to the :create action. The form has magically changed my hard coded input to post to the create action into a :put method to the :update action.

I know it's kind of an obscure problem. Maybe later today I'll post a git repository with the code needed to recreate the problem.

Expecting to get rendered: The same form page I've created at the :new action with the Invalid model notices from my model validations.

What is getting rendered: A form that LOOKS the same, with my Invalid model notices but now does not POST to the :create action. The form has magically changed my hard coded input to post to the create action into a :put method to the :update action.

Have you checked the html of the page to see exactly what is being generated incorrectly? View, Page Source or similar in browser.

Yes I have that's how I know it's changing the form method to PUT to dealer/id/edit. It's also adding an id of: edit_dealer_id_{#number} where {#number} is an actual digit.

I may be wrong, but I think rails uses the new_record? method to decide whether the form should be posted to the create or the update action when you do something like <% form_for(@dealer) do |f| %>. Are you sure your transaction is working correctly and that everything has been rolled back? Can you verify that @dealer.new_record? returns true after the failed transaction?