form_for和form_tag之间的区别?
form_for和form_tag有什么区别? form_remote_for和form_remote_tag有什么不同?
你会使用form_for为特定的模型,
<% form_for @person do |f| %> # you can use f here First name: <%= f.text_field :first_name %> Last name : <%= f.text_field :last_name %> <% end %>
Form_tag创build基本表单,
<%= form_tag '/person' do -%> <%= text_field_tag "person", "first_name" %> <% end -%>
form_for
首选arg作为activerecord对象; 它允许轻松地创build或编辑表单(要在“新”视图中使用它,您应该在控制器中创build一个空实例,如:
def new @foo = Foo.new end
它还将一个表单variables传递给块,以便您不必在表单本身内重复模型名称。 这是编写模型相关表单的首选方法。
form_tag
只是创build一个表单标签(当然,默默地准备一个防伪隐藏的领域,如form_for
); 它最适用于非模型的forms(我实际上只使用它为简单的searchforms或类似的)。
类似地, form_remote_for
和form_remote_tag
适用于模型相关的表单,而不是模型相关的表单,而不是以标准的http方法(GET,POST …)结束,而是调用ajax方法。
所有这些,以及更多可供您在FormHelper享受 和PrototypeHelper 参考页面。
编辑 2012-07-13
很久以前, Prototype
已经从rails
上移除了,远程forms已经完全改变了。 请参阅第一个链接,同时使用form_for
和form_tag
:remote
选项。
这些应该是类似的:
<% form_for @person do |f| %> <%= f.text_field :name %> <% end %>
和:
<%= form_tag '/person' do %> <%= text_field_tag "person[name]" %> <% end %>
如果你想向控制器提交相同的参数,你必须明确地定义它。