我面临一个奇怪的问题 当我试图销毁活动记录时,它会发出此错误。
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 :(得分:0)
我假设你正在使用resources :photo
根据{{3}},操作应为destroy
而非delete
七个默认操作是:index, new, create, show, edit, update and destroy
def destroy
@photo = current_user.photos.find(params[:id])
@photo.destroy
redirect_to photos_path
end
您还可以通过以下方式查看Rais Guide
rake routes
修改强>
问题出在这里::only => [:index, :show, :new, :create]
,这是对rails的说法:不要创建destroy
,edit
或update
路由。
要解决此问题,您可以向其添加销毁:only => [:index, :show, :new, :create, :destroy]
或使用:except
代替::except => [:edit, :update]
如果您不想限制资源:
resources :photos do
post 'upload', :on => :collection
end
编辑2 - 我真的不明白你为什么要使用delete
代替destroy
,但是,如果你有充分的理由:< / p>
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
答案 1 :(得分:0)
如果您有照片资源,则应删除操作名称,而不是删除。如果没有,请检查您的路线。
脚手架生成的七个默认操作如下: