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 %>
会产生