form_for,form_tag之间的区别?

时间:2009-08-28 21:04:00

标签: ruby-on-rails

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

3 个答案:

答案 0 :(得分:59)

您可以将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 -%>

答案 1 :(得分:53)

作为第一个arg,

form_for更喜欢一个activerecord对象;它允许轻松创建或编辑表单(要在“新”视图中使用它,您应该在控制器中创建一个空实例,如:

def new
  @foo = Foo.new
end

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

form_tag只是创建一个表单标记(当然,默默地准备一个反伪造隐藏字段,如form_for);它最适合用于非模型表单(实际上我只将它用于简单的搜索表单等)。

同样,form_remote_forform_remote_tag分别适用于模型相关表单而不适用于模型相关表单,但不是以标准http方法结尾(GET,POST ...),他们称之为ajax方法。

您可以在FormHelper PrototypeHelper 参考页面中享受所有这些以及更多内容。

编辑 2012-07-13

Prototype早已从rails移除,远程表单已完全更改。请参阅第一个链接,并选择:remoteform_for的{​​{1}}选项。

答案 2 :(得分:4)

这些应该类似:

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

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

如果要将相同的参数提交给控制器,则必须明确定义。