:form_for中的模型和@model之间的区别?

时间:2010-01-13 19:27:17

标签: ruby-on-rails

使用form_for以下方式之间有什么区别:

<% form_for @user do |f| %>
   <%= f.label :name %>:
   <%= f.text_field :name, :size => 40 %>
   ...
<% end %>

<% form_for :user, :url => {:action => 'create'} do |f| %>
   <%= f.label :name %>:
   <%= f.text_field :name, :size => 40 %>
   ...
<% end %>

使用@user是否只为URL操作自动使用CRUD方法?

2 个答案:

答案 0 :(得分:7)

如果您只是提供类似@user的模型实例而未指定操作(如第一个示例中所示),则Rails会自动为您的表单使用相应的CRUD操作:

  • 如果@user是未保存的新User对象,表单将指向您的create操作。

  • 如果@user是从数据库加载的现有User,则会使用update操作。

这样做的好处是,您可以为editnew视图重复使用相同的表单,而无需更改表单的:url参数。

像往常一样,API docs提供了更多信息。

答案 1 :(得分:4)

如果给form_for一个没有实例变量的符号,它会查找具有相同名称的实例变量。

文档说:

  

例如,如果@post是现有的   记录您要编辑

<% form_for @post do |f| %>
  ... 
<% end %>
     

等同于:

<% form_for :post, @post, :url => post_path(@post), :html => { :method => :put, :class => "edit_post", :id => "edit_post_45" } do |f| %>
  ...
<% end %>