RoR - Закрытие form_tag

Как закрыть form_tag? Вот мой код:

<%= 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>

Я пробовал <% end %> и <% end_form_tag %>, но получил ошибки. (Неожиданный кЕНД). Я немного погуглил, и ничего из того, что я видел, действительно не помогает. О, если я удаляю все после горизонтальной линейки, форма работает нормально. Но я хотел бы иметь две формы на странице...

Я использую Rails 2.3.5.


person Andrew    schedule 14.12.2009    source источник


Ответы (4)


form_tag также принимает блок, внутри которого можно разместить элементы формы, после чего она автоматически закроется. Из документов:

<% 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>
person Jordan Running    schedule 14.12.2009
comment
Ключевым отличием здесь является ‹% form_tag по сравнению с ‹%= form_tag Первый — это способ захватить все внутри блока и отобразить как открывающие, так и закрывающие теги, что вам и нужно здесь. - person James A. Rosen; 14.12.2009

Краткая версия (см. также: http://dev.rubyonrails.org/ticket/7391) :

</form>

?

Правильная версия:

<% form_tag '/someform' do -%> 
    <div><%= submit_tag 'Submit' %></div>
<% end -%>
person miku    schedule 14.12.2009

Мой способ исправить это - включить кнопку отправки прямо перед концом и сделать так, чтобы кнопка не отображалась.

  <%= submit_tag('',style: 'width:0;height:0;display:none;') %>
<% end %>

Это ставит конечный тег именно там, где мне это нужно.

person 6ft Dan    schedule 07.01.2015

Мое исправление заключается в размещении тега формы чуть выше тега таблицы.

<%= form_tag(update_password_path, :method=> "post") do |f| %>
 <p id="notice"><%= notice %></p>
<table align="center">
person Gowri Tumma    schedule 19.08.2015