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_forform_remote_tag适用于模型相关的表单,而不是模型相关的表单,而不是以标准的http方法(GET,POST …)结束,而是调用ajax方法。

所有这些,以及更多可供您在FormHelper享受 和PrototypeHelper 参考页面。

编辑 2012-07-13

很久以前, Prototype已经从rails上移除了,远程forms已经完全改变了。 请参阅第一个链接,同时使用form_forform_tag :remote选项。

这些应该是类似的:

 <% form_for @person do |f| %> <%= f.text_field :name %> <% end %> 

和:

 <%= form_tag '/person' do %> <%= text_field_tag "person[name]" %> <% end %> 

如果你想向控制器提交相同的参数,你必须明确地定义它。