0

このエラーが発生しているアクティブなレコードを破棄しようとすると、奇妙な問題に直面しています。

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

リソースに :destroy が含まれていないことは承知しています :destroy アクションを挿入して写真を削除する方法を教えてください

4

2 に答える 2

0

写真のリソースがある場合、アクション名は削除ではなく破棄する必要があります。そうでない場合は、ルートを確認してください。

スキャフォールディングによって生成される7つのデフォルトアクションは次のとおりです

  1. 索引
  2. 新着
  3. 編集
  4. 作成
  5. アップデート
  6. 公演
  7. 破棄#削除しない
于 2013-03-08T11:35:09.077 に答える
0

を使用していると仮定しますresources :photo
アクションは、 Rais ガイドに従って、する必要がdestroyあります。 7 つのデフォルト アクションは次のとおりです。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

利用可能なルートは、次の方法でも確認できます。

rake routes

編集

問題はここにあります: :only => [:index, :show, :new, :create]、これは rails: do not create destroyeditまたはupdateroutes に言っています。

この問題を解決するには、destroy を追加するか、代わりに次:only => [:index, :show, :new, :create, :destroy]を使用します。:except:except => [:edit, :update]

リソースを制限したくない場合:

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

EDIT 2delete -の代わりに使用しようとしている理由がよくわかりません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
于 2013-03-08T11:28:34.333 に答える