2010-01-13 63 views
6

是使用什么的的form_for下列方式之间的区别:form_for中的model和@model之间的区别?

<% 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方法?

+0

Duplicates:http://stackoverflow.com/questions/1582695/和http://stackoverflow.com/questions/957204/ – 2010-01-13 20:00:45

回答

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 %> 
7

如果您只是提供一个模型实例,如@user,而无需指定的动作(如在第一个例子),自动Rails使用适当的CRUD动作为表单:

  • 如果@user是一种新的,未保存User目的,形式将指向create动作。

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

这样做的好处是可以重复使用相同的形式为您的editnew看法,并没有改变:url参数的形式。

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

+0

你的解释对我来说比API doc更有帮助。+1 – 2015-02-22 18:28:03

相关问题