2010-12-15 8 views
9

In index.html.erb mi potrai vedere tutti i prodotti, e accanto ad ogni prodotto che ho Edit e Delete azioni:Perché Rails "link_to" non funziona per l'azione di eliminazione?

<% @products.each do |product| %> 
    ... 
    <%= link_to("Edit", edit_product_path(product.id), :class => 'action') %> 
    <%= link_to("Delete", product, :method => :delete, :class => 'action') %> 
    ... 
<% end %> 

Il Edit collegamento funziona bene. Tuttavia, il collegamento Delete non funziona. Viene visualizzato il seguente errore:

Unknown action 
The action 'show' could not be found for ProductsController 

Suppongo che sia perché il metodo di richiesta è GET anziché CANC. Ma, non so perché questo accade se imposto esplicitamente :method => :delete.

routes.rb è piuttosto semplice:

root :to => "products#index" 
resources :products 

ho Javascript abilitato.

Si prega di suggerire.

+0

hai provato aggiungendo l'azione spettacolo, anche se non lo si utilizza in modo che le rotte sono coperto ... Solo un pensiero – Richard

+0

ti hai un'azione di eliminazione nel tuo controller? E prova anche rake: comando route per vedere se il percorso di cancellazione è definito correttamente. – ranendra

risposta

11

Avete rails.js specificato in un javascript_include_tag? Questo è necessario per il discreto metodo DELETE per funzionare. Se stai usando jQuery poi c'è una solution for that too.

+0

Nella sorgente della pagina vedo che 'rails.js' viene caricato. Io uso jQuery 1.4.4. È un problema? L'ho appena scaricato dal sito ufficiale e inserito in 'javascript_include_tag'. Dovrei sostituirlo con i file dal tuo link? Cosa devo scaricare esattamente? –

+2

@Misha: Scaricare il file rails.js nella directory src e metterlo nella cartella pubblica/javascript come rails.js. Se stai usando jQuery, si * deve * sostituisce il 'rails.js' prototipo con l'equivalente jQuery. –

+0

@Ryan: Grazie mille per avermi guidato! Se uso jQuery invece di Prototype, ho ancora bisogno 'javascript_include_tag: defaults'? –

2

Deve essere product_path(product) anziché product nel collegamento di eliminazione.

+0

Provato, non è stato d'aiuto. Lo stesso errore. –

+0

Che aspetto ha l'HTML risultante per il tag link? –

+0

'' Delete

0

Ho avuto lo stesso problema - in realtà avevo cambiato la mia azione vecchio 'cancellare' a 'distruggere' - ma dimenticato Se la vostra utilizzando SSL .. (ad es ssl_required: distruggere)

5

non dimenticate di includere nel jquery_ujsapplication.js di file:?

// 
//= require jquery 
//= require jquery_ujs 
// ...