2010-12-15 3 views
9

В index.html.erb отобразить все продукты, а рядом с каждым продуктом у меня есть Edit и Delete действия:Почему Rails "link_to" не работает для удаления?

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

Edit ссылка работает нормально. Однако ссылка Delete не работает. Я получаю следующую ошибку:

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

Я думаю, это потому, что метод запроса GET, а не DELETE. Но, я не знаю, почему это происходит, если я устанавливаю явно :method => :delete.

routes.rb довольно прост:

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

У меня включен Javascript.

Просьба предложить.

+0

вы попробуйте добавить шоу действие, даже если вы не используете его, чтобы ваши маршруты вы покрыты ... Просто мысли – Richard

+0

ли вам удалить действие в вашем контроллере? А также попробуйте команду rake: route, чтобы проверить правильность определения пути удаления. – ranendra

ответ

11

У вас есть rails.js, указанный в javascript_include_tag? Это необходимо для ненавязчивого метода DELETE. Если вы используете JQuery, то есть solution for that too.

+0

В источнике страницы я вижу, что загружается 'rails.js'. Я использую jQuery 1.4.4. Это проблема? Я просто загрузил его с официального сайта и поместил его в 'javascript_include_tag'. Должен ли я заменить его на файлы из вашей ссылки? Что именно загрузить? –

+2

@Misha: Загрузите файл rails.js в каталог src и поместите его в свою папку public/javascripts как rails.js. Если вы используете jQuery, вы * должны * заменить Prototype 'rails.js' эквивалентом jQuery. –

+0

@ Ryan: Большое спасибо за руководство мной! Если я использую jQuery, а не Prototype, мне все равно нужно javascript_include_tag: defaults'? –

2

Это должно быть product_path(product) вместо product в вашей ссылке для удаления.

+0

Пробовал, это не помогло. Такая же ошибка. –

+0

Как выглядит полученный HTML-код для тега ссылки? –

+0

'Delete' –

0

У меня была такая же проблема - на самом деле я изменил свой старый «удалить» действия, чтобы «уничтожить» - но забыл Если с помощью SSL .. (например ssl_required: уничтожить)

5

не забудьте включить jquery_ujs в вашем application.js файле:

// 
//= require jquery 
//= require jquery_ujs 
// ... 
Смежные вопросы