Различия тонкие, но важные. 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
вы несете ответственность за все, поскольку он не делает никаких предположений о том, что вы делаете.