2011-10-09 12 views
9

Tengo un carro que contiene muchos line_items. Me gustaría tener un botón de "eliminar" al lado de cada elemento de línea que, al hacer clic, elimina el elemento de línea del carro.Obteniendo un formulario para usar: method =>: delete (rails)

Sé que puedo hacer esto con un método button_to, pero me gustaría usar form_for porque me gustaría cambiar los atributos del objeto principal de line_item al mismo tiempo (cada elemento de línea también pertenece a un curso, y me gustaría decirle al padre del curso que ya no está en el carro).

Aquí está mi código utilizando form_for:

<%= form_for(line_item, :method => :delete, :remote => true) do |f| %> 
<%= f.submit :value => "Delete" %> 
<% end %> 

La documentación rubí dice que la simple adición: method =>: eliminar debería funcionar (http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper .html # method-i-form_for), pero el html renderizado no es del todo correcto. Es todavía

<input name="_method" type="hidden" value="put"> 

Pero debería ser:

<input name="_method" type="hidden" value="delete"> 

¿Qué estoy haciendo mal?

Respuesta

11

Mark Needham tiene un blog post que explica por qué :method => delete en form_for no funciona. Dice

Resulta que ‘form_for’ espera que el ‘: Método’ que se proporciona como parte de la mano derecha más argumento como parte de un hash con la clave ‘html’.

Así que hay que cambiar el código de:

<%= form_for(line_item, :method => :delete, :remote => true) do |f| %> 

a:

<%= form_for(line_item, :html => { :method => :delete, :remote => true }) do |f| %> 

Lo he probado en una aplicación Rails 3.0, y el HTML generado fue:

<input type="hidden" value="delete" name="_method"> 
Cuestiones relacionadas