AbstractController :: ActionNotFound用于销毁动作

时间:2013-03-08 11:19:56

标签: ruby-on-rails activerecord

我面临一个奇怪的问题 当我试图销毁活动记录时,它会发出此错误。

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

我知道我没有包含:在资源中销毁请建议我如何插入:删除动作以删除照片

2 个答案:

答案 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的说法:不要创建destroyeditupdate路由。

要解决此问题,您可以向其添加销毁: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)

如果您有照片资源,则应删除操作名称,而不是删除。如果没有,请检查您的路线。

脚手架生成的七个默认操作如下:

  1. 索引
  2. 修改
  3. 创建
  4. 更新
  5. 显示
  6. 销毁#not delete