2009-06-05 18 views
11

soy nuevo en ruby ​​on rails y estoy trabajando con la versión 2.3 en mac osx. estoy tratando de crear la misma funcionalidad que crea un andamio, pero por mi cuenta. creé un controlador, una vista y un modelo de "publicación". en el controlador post, tengo los siguientes:variable de instancia vs. símbolo en ruby ​​on rails (form_for)

class PostController < ApplicationController 
    def index 
    end 

    def new 
    @post = Post.new 
    end 
end 

en new.html.erb, tengo los siguientes:

<h1>New Post</h1> 

<% form_for :post do |f| %> 

    <%= f.text_field :title %> 

<% end %> 

i notado que en el andamio código generado, el uso de la variable de instancia @post para form_for helper. ¿Por qué usan la variable de instancia en la forma generada del andamio si pasan el símbolo: publicar en form_for hace exactamente lo mismo, mientras que un símbolo requiere cambiar la configuración de las rutas?

muchas gracias, yuval

Respuesta

15

si se utiliza el símbolo: publicar crea

<form action="/posts" method="post"> 

si utiliza la instancia @post

para @post = Post.new obtendrá

<form action="/posts/create" class="new_account" id="new_account" method="post"> 

para @post = Post.find (1) obtendrá

<form action="/posts/update" class="edit_account" id="edit_account_1" method="post"> 
<input name="_method" type="hidden" value="put"> 

si tienes formularios diferentes para tu nuevo y tu edición no es gran cosa pero más que tus nuevos y tus formularios de edición serán idénticos o cercanos

así que si usas la variable de instancia @post puedes ponga todo el código del formulario en _form y simplemente llame al parcial y se encargará del resto en función de si pasa un nuevo registro o un registro existente

+0

muchas gracias. eso lo deja claro :) –

+3

la importancia de ese método oculto es que los navegadores no son compatibles con los métodos de poner y eliminar, así que debes dejar que la aplicación sepa cuando un método de publicación está destinado a ser un put o un delete, afortunadamente rails mágicamente maneja esto para nosotros – ErsatzRyan

+0

Necesita utilizar @post en el nuevo formulario, y lo necesita incluso si sus formularios están separados. De lo contrario, cuando crea una nueva publicación con datos no válidos y regresa al nuevo formulario con errores de validación, no completará la información que ingresó. –

0

Una posible razón es que hace que el código del formulario para crear un nuevo puesto más similar al código para una forma de actualizar un mensaje existente.

+0

gracias por su respuesta –