form_for和form_tag之间的区别?

时间:2012-03-02 21:00:05

标签: ruby-on-rails forms form-for

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

  • 的form_for
  • form_tag with block
  • form_tag without block

任何人都可以澄清吗?我知道当你希望与模型互动时会使用form_for,但其他两个呢?

3 个答案:

答案 0 :(得分:14)

差异很微妙,但很重要。 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,您对所有内容负责,因为它不会对您正在做的事情做出任何假设。

答案 1 :(得分:4)

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

答案 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>