2010-01-13 7 views
6

¿Cuál es la diferencia entre usar form_for la siguiente manera:Diferencia entre: modelo y @model en form_for?

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

y:

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

¿El uso @user sólo tiene que utilizar métodos CRUD automáticamente para las acciones de URL?

+0

Duplicados: http://stackoverflow.com/questions/1582695/ y http://stackoverflow.com/questions/957204/ –

Respuesta

4

Si le da a form_for un símbolo sin una variable de instancia, busca una variable de instancia con el mismo nombre.

La documentación dice:

Por ejemplo, si es un @post registro existente que desea editar

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

es equivalente a algo como:

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

Si solo le da una instancia de modelo como @user sin especificar una acción (como en su primer ejemplo), los carriles automáticamente utiliza la acción CRUD apropiado para su formulario:

  • Si @user es una nueva, no salvo User objeto, la forma será apuntan a su acción create.

  • Si @user es un User existente cargado desde la base de datos, se usará la acción update en su lugar.

Esto tiene la ventaja de que se puede reutilizar la misma forma tanto para sus edit y new vistas sin cambiar el parámetro :url de sus formas.

Como de costumbre, el API docs proporciona más información.

+0

Su explicación es de mucha ayuda para mí que el documento API .. +1 –

Cuestiones relacionadas