2010-12-15 10 views
9

W index.html.erb wyświetlać wszystkie produkty, a obok każdego produktu mam Edit i Delete czynności:Dlaczego Rails "link_to" nie działa dla akcji usuwania?

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

Edit link działa OK. Jednak link Delete nie działa. Pojawia się następujący błąd:

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

Domyślam się, że jest tak, ponieważ metoda żądania jest GET zamiast DELETE. Ale nie wiem, dlaczego tak się stanie, jeśli ustawię jawnie :method => :delete.

routes.rb jest dość prosta:

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

Mam włączoną obsługę Javascript.

Proszę sugerować.

+0

Próbowałaś dodanie akcji show, nawet jeśli nie jest używany tak, że drogi są pokryte ... Tylko ty myśl – Richard

+0

Czy Czy chcesz usunąć akcję w kontrolerze? A także spróbuj użyć polecenia rake: route, aby sprawdzić, czy ścieżka usuwania jest poprawnie zdefiniowana. – ranendra

Odpowiedz

11

Czy masz rails.js określony w javascript_include_tag? Jest to wymagane, aby dyskretna metoda zadziałała DELETE. Jeśli używasz jQuery to istnieje solution for that too.

+0

W źródle strony widzę, że 'rails.js' jest załadowany. Używam jQuery 1.4.4. Czy to problem ? Właśnie pobrałem go z oficjalnej strony i umieściłem w 'javascript_include_tag'. Czy powinienem go zastąpić plikami z twojego linku? Co dokładnie powinienem pobrać? –

+2

@Misha: Pobierz plik rails.js w katalogu src i umieść go w folderze public/javascripts jako rails.js. Jeśli używasz jQuery, musisz * zastąpić prototypowy 'rails.js' odpowiednikiem jQuery. –

+0

@Ryan: Wielkie dzięki za kierowanie mną! Jeśli używam jQuery zamiast Prototype, czy nadal potrzebuję 'javascript_include_tag: defaults'? –

2

To musi być product_path(product) zamiast product w linku do usuwania.

+0

Próbowałem, to nie pomogło. Ten sam błąd. –

+0

Jak wygląda wynikowy znacznik HTML dla tagu linku? –

+0

'Delete' –

0

miałem ten sam problem - w rzeczywistości ja nie zmieniło moje stare „Usuń” działania mające na celu „zniszczyć” - ale zapomniał Jeśli użyciu SSL .. (np ssl_required: zniszczyć)

5

Dont zapomnij podać jquery_ujs w pliku application.js:

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