form_for和form_tag之间的区别?

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

  • 的form_for
  • 带块的form_tag
  • form_tag没有块

任何人都可以澄清吗? 我知道当你希望与一个模型进行交互时会使用form_for ,但另外两个呢?

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

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

form_tag方法更原始,只发出一个标签。 如果你想把东西放在发出的

标签内,你就把东西放在块里面:

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

请注意, form_for方法处理从模型中获取值,并且至少会尝试将表单路由到适当的操作。 使用form_tag您可以对所有内容负责,因为它不会对您正在做的事情做出任何假设。

一个使用模型绑定而另一个不使用

据我所知,只有一个简单的区别。 没有块的form_tag只会为你生成一个html元素。 当您使用带有块的表单时,它还将创建表单结束标记。

例如:

 <% form_tag("/comments") %> 

会导致

 

哪里

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

会产生