我在我的应用程序中使用了this gem,但我不确定gem的不同实现选项之间的区别:
任何人都可以澄清吗?我知道当你希望与模型互动时会使用form_for
,但其他两个呢?
答案 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>