【问题标题】:Difference between form_for and form_tag?form_for 和 form_tag 的区别?
【发布时间】:2012-03-02 21:00:05
【问题描述】:

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

  • form_for
  • 带有块的form_tag
  • form_tag 无块

谁能澄清一下?我知道form_for 在您希望与模型交互时使用,但是其他两个呢?

【问题讨论】:

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


【解决方案1】:

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

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

form_tag 方法更原始,只是发出一个标签。如果你想把东西放在发出的&lt;form&gt; 标签里面,你把东西放在块里面:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 您能详细说明什么是模型绑定吗?
    • @mbigras afaik 模型绑定是当您有一个表单时(例如其中包含一个人的姓名),并且它会在提交时通过 rails(或其他框架)自动填充到“人”对象中.
    • 正如您在 tadmans 示例中看到的那样,form_for 是对象 @ foo 的“范围”(这就是为什么您只需要指定属性名称 bar,这与 form_tag 示例不同)。这个 form_for 标签还支持开箱即用的 @foo 对象的读/写/更新
    【解决方案3】:

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

    例如:

    <% form_tag("/comments") %>
    

    会导致

    <form action="/comments">
    

    在哪里

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

    会生成

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多