form_for和form_tag有什么区别? form_remote_for和form_remote_tag有什么不同吗?
答案 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)
form_for
更喜欢一个activerecord对象;它允许轻松创建或编辑表单(要在“新”视图中使用它,您应该在控制器中创建一个空实例,如:
def new
@foo = Foo.new
end
它还将表单变量传递给块,因此您不必在表单本身中重复模型名称。这是编写模型相关表单的首选方式。
form_tag
只是创建一个表单标记(当然,默默地准备一个反伪造隐藏字段,如form_for
);它最适合用于非模型表单(实际上我只将它用于简单的搜索表单等)。
同样, form_remote_for
和form_remote_tag
分别适用于模型相关表单而不适用于模型相关表单,但不是以标准http方法结尾(GET,POST ...),他们称之为ajax方法。
您可以在FormHelper 和PrototypeHelper 参考页面中享受所有这些以及更多内容。
编辑 2012-07-13
Prototype
早已从rails
移除,远程表单已完全更改。请参阅第一个链接,并选择:remote
和form_for
的{{1}}选项。
答案 2 :(得分:4)
这些应该类似:
<% form_for @person do |f| %>
<%= f.text_field :name %>
<% end %>
和
<%= form_tag '/person' do %>
<%= text_field_tag "person[name]" %>
<% end %>
如果要将相同的参数提交给控制器,则必须明确定义。