【发布时间】:2012-03-02 21:00:05
【问题描述】:
我在我的应用程序中使用了this gem,但我不确定 gem 的不同实现选项之间的区别:
- form_for
- 带有块的form_tag
- form_tag 无块
谁能澄清一下?我知道form_for 在您希望与模型交互时使用,但是其他两个呢?
【问题讨论】:
标签: ruby-on-rails forms form-for
我在我的应用程序中使用了this gem,但我不确定 gem 的不同实现选项之间的区别:
谁能澄清一下?我知道form_for 在您希望与模型交互时使用,但是其他两个呢?
【问题讨论】:
标签: ruby-on-rails forms form-for
差异很微妙,但很重要。 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,您将对所有事情负责,因为它不会对您所做的事情做出任何假设。
【讨论】:
一个使用模型绑定,另一个不使用
【讨论】:
据我所知,只有一个简单的区别。没有块的 form_tag 只会为您生成一个 html 元素。当您将表单与块一起使用时,它还会创建表单结束标记。
例如:
<% form_tag("/comments") %>
会导致
<form action="/comments">
在哪里
<%= form_tag("/comments") do %>
<%= submit_tag %>
<% end %>
会生成
<form action="/comments">
<input type="sumbit" />
</form>
【讨论】: