form_for和form_tag之间的区别?


80

form_for和form_tag有什么区别?form_remote_for和form_remote_tag有什么不同吗?

Answers:


63

您可以将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创建基本表单,

<%= form_tag '/person' do -%>
  <%= text_field_tag "person", "first_name" %>
<% end -%>

53

form_for首选一个activerecord对象作为它的第一个arg;它允许轻松地创建或编辑表单(要在“新”视图中使用它,您应该在控制器中创建一个空实例,例如:

def new
  @foo = Foo.new
end

它还将一个form变量传递给该块,因此您不必在表单本身内重复模型名称。这是编写模型相关表格的首选方式。

form_tag只需创建一个表单标签(当然,并且静默地准备一个防伪隐藏字段,例如form_for);最好用于非模型表单(我实际上仅将其用于简单的搜索表单等)。

同样,form_remote_forform_remote_tag适合于模型有关的各种形式,而不是相关的形式分别进行建模,但是,而不是在一个标准的HTTP方法结束(GET,POST ...),他们称为AJAX方法。

所有这些以及更多内容都可以在FormHelper中使用 PrototypeHelper 参考页。

编辑2012-07-13

Prototype已从rails很久以前删除,并且远程表单已完全更改。请参阅第一个链接,与reguard的:remote两个选项form_forform_tag


1
@WowBow你是对的;毕竟,这个答案是相当古老的,并且Prototype早已从rails中删除。我将编辑答案。
giorgian

form_for“首选” ActiveRecord对象是什么意思?
shiggity

1
@shiggity:当然,它也接受符号或字符串。但是给定一个ActiveRecord对象,它做对了。
乔治亚2014年

4

这些应该类似:

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

和:

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

如果要向控制器提交相同的参数,则必须显式定义。


简短而精确。[美丽的期望]
丹麦阿布沙尔
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.