2011-10-09 1 views
9

Ho un carrello che contiene molti line_items. Mi piacerebbe avere un pulsante "Elimina" accanto a ciascun elemento pubblicitario che, una volta fatto clic, rimuove l'elemento line_item dal carrello.Ottenere un modulo da usare: metodo =>: cancella (rotaie)

So che posso farlo con un metodo button_to, ma mi piacerebbe utilizzare form_for perché mi piacerebbe cambiare gli attributi dell'oggetto padre line_item allo stesso tempo (ogni line_item appartiene anche a un corso, e vorrei dire al genitore del corso che non è più nel carrello).

Ecco il mio codice utilizzando form_for:

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

La documentazione rubino dice che la semplice aggiunta: method =>: elimina dovrebbe funzionare (http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper .html # method-i-form_for), ma l'html reso non è del tutto corretto. E 'ancora

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

Ma dovrebbe essere:

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

Che cosa sto facendo di sbagliato?

risposta

11

Mark Needham ha un blog post che parla del motivo per cui :method => delete in form_for non funziona. Dice

Si scopre che ‘form_for’ si aspetta che il ‘: Metodo’ essere fornito come parte della mano destra maggior argomento come parte di un hash con la chiave ‘: html’.

quindi è necessario modificare il codice da:

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

a:

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

ho provato in un'applicazione Rails 3.0, e l'HTML generato è stato:

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