form_for和form_tag之间的区别?

GiH*_*GiH 12 forms ruby-on-rails form-for

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

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

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

tad*_*man 15

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

<% form_for(@foo) do |form| %>
  <%= form.text_field(:bar) %>
<% end %>
Run Code Online (Sandbox Code Playgroud)

form_tag方法更原始,只发出一个标签.如果你想把东西放在<form>发出的标签里面,你就把东西放在块里面:

<% form_tag do %>
  <%= text_field_tag(:bar, 'bar_value') %>
<% end %>
Run Code Online (Sandbox Code Playgroud)

请注意,该form_for方法处理从模型中获取值,并至少尝试将表单路由到适当的操作.由于form_tag您不会对您正在做的事情做出任何假设,因此您对所有事情负责.