2013-03-08 6 views
0

я обращенную странные проблемы , когда я пытаюсь разрушить активную запись он дает эту ошибку.AbstractController :: ActionNotFound для уничтожения действия

AbstractController::ActionNotFound at /photos/6 

The action 'destroy' could not be found for PhotosController 

вот что мой контроллер выглядеть

class PhotosController < ApplicationController 
    before_filter :authenticate_user! 

.... 
.... 

    def delete 
     @photo = current_user.photos.find(params[:id]) 
     @photo.destroy 
     redirect_to photos_path 
    end 

и если я выполнять те же действия с помощью консоли он работает нормально (запись становится успешно удален).

Это мой файл маршруты выглядеть.

resources :photos, :only => [:index, :show, :new, :create] do 
    post 'upload', :on => :collection 
end 

Я знаю, что я не включил: уничтожить в ресурсах, пожалуйста, предложить мне, как вставить: уничтожить действия, чтобы удалить фотографии

ответ

0

Я предполагаю, что вы используете resources :photo.
Действие должно быть destroy, а не delete, что соответствует Rais Guide.
семь по умолчанию действия: index, new, create, show, edit, update and destroy

def destroy 
    @photo = current_user.photos.find(params[:id]) 
    @photo.destroy 
    redirect_to photos_path 
end 

Вы также можете увидеть available routes по:

rake routes 

EDIT

Проблема здесь: :only => [:index, :show, :new, :create], который говорит на рельсы : не создавать destroy, edit или update маршруты.

Чтобы решить эту проблему, вы можете добавить к нему уничтожить :only => [:index, :show, :new, :create, :destroy] или использовать :except вместо: :except => [:edit, :update]

Если вы не хотите, чтобы limitate ресурсы:

resources :photos do 
    post 'upload', :on => :collection 
end 

EDIT 2 - I на самом деле не понимаю, почему вы пытаетесь использовать delete вместо destroy. Однако, если у вас есть веская причина:

resources :photos :only => [:index, :show, :new, :create] do 
    post 'upload', :on => :collection 
    get 'delete', :on => :member 
end 

Таким образом, вы будете иметь delete_photo_path, которые могут быть использованы в целях показа:

<%= link_to 'Delete', delete_photo_path(@photo) %> 

Наконец, действие удаления должно выглядеть:

def delete 
    @photo = Photo.find(params[:id]) 
    @photo.destroy 
    redirect_to photos_path 
end 
+0

Я попытался использовать действие удаления также !! даже если я использую действие удаления, это указывает на ту же ошибку. «Действие« destroy »не найдено для PhotosController» – Aahlad

+0

Не могли бы вы включить вывод маршрутов рейка в свой вопрос. – gabrielhilal

+0

yes Я включил код файла маршрутов. не могли бы вы объяснить мне, как вставлять уничтожение в маршруты отдельно, чтобы удалить фотографии? – Aahlad

0

, если у вас есть ресурс фото, тогда имя действия должно быть уничтожено, а не удалять. и если нет, то проверьте свои маршруты.

Семь действие по умолчанию, которые создаются с помощью строительных лесов являются следовать

  1. индекс
  2. новый
  3. редактировать
  4. создать
  5. обновление
  6. показать
  7. уничтожить # не удалять
Смежные вопросы