Ruby on rails 表单和表单标签之间的区别?

Ruby on rails 表单和表单标签之间的区别?,ruby-on-rails,forms,form-for,Ruby On Rails,Forms,Form For,我在应用程序中使用了,但我不确定gem的不同实现选项之间的区别: 表格 带块的form_标签 不带块的form_标签 有人能澄清一下吗?我知道当您希望与模型交互时,会使用的表单,但是其他两个呢?差异很细微,但很重要form_for是一种更高级的工具,可生成用于生成表单元素的对象: <% form_for(@foo) do |form| %> <%= form.text_field(:bar) %> <% end %> 请注意,form\u for方法

我在应用程序中使用了,但我不确定gem的不同实现选项之间的区别:

  • 表格
  • 带块的form_标签
  • 不带块的form_标签

有人能澄清一下吗?我知道当您希望与模型交互时,会使用的表单,但是其他两个呢?

差异很细微,但很重要
form_for
是一种更高级的工具,可生成用于生成表单元素的对象:

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

请注意,
form\u for
方法处理从模型中获取的值,并且至少会尝试将表单路由到适当的操作。使用
form_tag
你要对一切负责,因为它不会对你所做的事情做出任何假设。

据我所知,只有一个简单的区别。没有块的form_标记只会为您生成一个html元素。将窗体与块一起使用时,它还将创建窗体结束标记

例如:

<% form_tag("/comments") %>

将导致

<form action="/comments">

在哪里

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

将产生

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


一个使用模型绑定,而另一个不使用模型绑定。您能详细说明什么是模型绑定吗?@mbigras afaik模型绑定是指当您有一个表单(例如,表单中有一个人名)并且它通过rails(或其他框架)自动填充到“person”对象中时正如您在tadmans示例中所看到的,表单_的“作用域”是对象@foo(这就是为什么您只需要指定属性名称bar,而不像表单_标记示例中那样)。此form_for标记还支持对@foo对象进行开箱即用的读/写/更新
<form action="/comments">
  <input type="sumbit" />
</form>