# Self Creating edit page?

**URL:** <https://www.ruby-forum.com/t/self-creating-edit-page/188834>\
**Category:** Rails\
**Created:** [May 19, 2010, 2:37am UTC](https://www.ruby-forum.com/t/self-creating-edit-page/188834 "2010-05-19T02:37:33Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![brianp](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/94ad74/32.png) [@brianp](https://www.ruby-forum.com/u/brianp)\
**Post date:** [May 19, 2010, 2:37am UTC](https://www.ruby-forum.com/t/self-creating-edit-page/188834/1 "2010-05-19T02:37:33Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![brianp](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/94ad74/32.png) [@brianp](https://www.ruby-forum.com/u/brianp)\
**Post date:** [May 19, 2010, 10:15am UTC](https://www.ruby-forum.com/t/self-creating-edit-page/188834/2 "2010-05-19T10:15:52Z")

</div>

On May 19, 2:36 am, brianp [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> BUT the page gets rendered as an  
> edit\_dealer\_id page. with a new hidden field telling the form to  
> submit via put method.  
> I dont really unserstand what you’re saying. What are you expecting to  
> get rendered, and what is actually getting rendered?

---

<div class="post-metadata">

**Author:** ![brianp](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/94ad74/32.png) [@brianp](https://www.ruby-forum.com/u/brianp)\
**Post date:** [May 19, 2010, 5:45pm UTC](https://www.ruby-forum.com/t/self-creating-edit-page/188834/3 "2010-05-19T17:45:30Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![brianp](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/94ad74/32.png) [@brianp](https://www.ruby-forum.com/u/brianp)\
**Post date:** [May 19, 2010, 6:45pm UTC](https://www.ruby-forum.com/t/self-creating-edit-page/188834/4 "2010-05-19T18:45:48Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![brianp](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/94ad74/32.png) [@brianp](https://www.ruby-forum.com/u/brianp)\
**Post date:** [May 19, 2010, 6:40pm UTC](https://www.ruby-forum.com/t/self-creating-edit-page/188834/5 "2010-05-19T18:40:32Z")

</div>

On 19 May 2010 16:44, brianp [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> 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.

---

<div class="post-metadata">

**Author:** ![brianp](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/94ad74/32.png) [@brianp](https://www.ruby-forum.com/u/brianp)\
**Post date:** [May 20, 2010, 12:45pm UTC](https://www.ruby-forum.com/t/self-creating-edit-page/188834/6 "2010-05-20T12:45:48Z")

</div>

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?
