Разница между form_for и form_tag? - PullRequest
11 голосов
/ 03 марта 2012

Я использовал этот камень в своем приложении, но я не уверен, что разница между различными вариантами реализации для этого камня:

  • form_for
  • form_tag с блоком
  • form_tag без блока

Кто-нибудь может уточнить? Я понимаю, что form_for используется, когда вы хотите взаимодействовать с моделью, но как насчет двух других?

Ответы [ 3 ]

14 голосов
/ 03 марта 2012

Различия тонкие, но важные. form_for - более продвинутый инструмент, который выдает объект, который вы используете для генерации элементов формы:

<% form_for(@foo) do |form| %>
  <%= form.text_field(:bar) %>
<% end %>

Метод form_tag гораздо более примитивен и просто выдает тег. Если вы хотите поместить что-то в испускаемый тег <form>, вы должны поместить его в блок:

<% form_tag do %>
  <%= text_field_tag(:bar, 'bar_value') %>
<% end %>

Обратите внимание, что метод form_for обрабатывает получение значений из вашей модели и, по крайней мере, попытается направить форму к соответствующему действию. С form_tag вы несете ответственность за все, поскольку он не делает никаких предположений о том, что вы делаете.

4 голосов
/ 03 марта 2012

Один использует привязку модели, а другой нет

3 голосов
/ 03 марта 2012

Насколько я знаю, есть только одно простое отличие.form_tag без блока будет генерировать только HTML-элемент для вас.Когда вы используете форму с блоком, он также создает закрывающий тег формы.

Например:

<% form_tag("/comments") %>

приведет к

<form action="/comments">

Где

<%= form_tag("/comments") do %>
  <%= submit_tag %>
<% end %>

сгенерирует

<form action="/comments">
  <input type="sumbit" />
</form>
...