Разница между form_for и form_tag?
Я использовал этот камень в своем приложении, но я не уверен, что разница между различными вариантами реализации для драгоценного камня:
- form_for
- form_tag с блоком
- form_tag без блока
Может ли кто-нибудь уточнить? Я понимаю, что form_for
используется, когда вы хотите взаимодействовать с моделью, но как насчет двух других?
Ответы
Ответ 1
Различия тонкие, но важные. 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
вы несете ответственность за все, так как не делаете никаких предположений о том, что вы делаете.
Ответ 2
Один использует привязку модели, а другой не
Ответ 3
Насколько я знаю, есть только одно простое отличие. form_tag без блока генерирует только элемент html для вас. Когда вы используете форму с блоком, она также создаст тег закрытия формы.
В примере:
<% form_tag("/comments") %>
приведет к
<form action="/comments">
Где
<%= form_tag("/comments") do %>
<%= submit_tag %>
<% end %>
будет генерировать
<form action="/comments">
<input type="sumbit" />
</form>