Разница между 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>