views:

192

answers:

2

How do I close a form_tag? Here's my code:

<%= form_tag :action => 'authenticate' %>
<h1>Already a member?</h1>
<table>
  <tr>
    <td>Username*: </td>
    <td><%= text_field("userform", "user_name", :size => "20", :class => "field") %></td>
  </tr>
  <tr>
    <td>Password*: </td>
    <td><%= password_field("userform", "password", :size => "20", :class => "field") %></td>
  </tr>
  <tr>
    <td></td><td><input type="submit" value="Login" class="form_button" /></td>
  </tr>
</table>

<hr />

<%= form_tag :action => 'register' %>
<h1>Register</h1>
<table>
  <tr>
    <td>Username*: </td>
    <td><%= text_field("userform", "user_name", :size => "20", :class => "field") %></td>
  </tr>
  <tr>
    <td>Password*: </td>
    <td><%= password_field("userform", "password", :size => "20", :class => "field") %></td>
  </tr>
  <tr>
    <td>Email*: </td>
    <td><%= text_field("userform", "password", :size => "20", :class => "field") %></td>
  </tr>
  <tr>
    <td></td><td><input type="submit" value="Register" class="form_button" /></td>
  </tr>
</table>

I tried <% end %> and <% end_form_tag %>, but I got errors. (Unexpected kEND). I've Googled around a bit, and nothing I've seen really helps. Oh, if I delete everything after the horizontal ruler, the form works fine. But I'd like to have two forms on the page...

I'm using Rails 2.3.5.

+3  A: 

Short version (see also: http://dev.rubyonrails.org/ticket/7391):

</form>

?

Correct version:

<% form_tag '/someform' do -%> 
    <div><%= submit_tag 'Submit' %></div>
<% end -%>
The MYYN
I had not. But I did. And that worked.
Andrew
+5  A: 

form_tag also takes a block, inside which you can put the form elements, whereupon it will be closed automatically. From the docs:

<% form_tag '/posts' do -%>
    <div><%= submit_tag 'Save' %></div>
<% end -%>

# => <form action="/posts" method="post"><div><input type="submit" name="submit" value="Save" /></div></form>
Jordan
+1 for the right way do use form_tag
Jeff Paquette
A key distinction here is "<% form_tag" versus "<%= form_tag" The former is the way to capture everything inside the block and render both opening and closing tags, which is what you want here.
James A. Rosen