2015-08-14 38 views
0

我在導軌應用程序中遇到了一些麻煩。我檢查了這個錯誤的其他問題,它們都不適用於我的應用程序。AbstractController :: ActionNotFound - 找不到動作'destroy'

我需要銷燬一行,並做到這一點,我直接在我的控制器內的行爲'毀滅'的形式。

這裏是我指導它的地方。

<%= form_for(:pallet_hist, :url => {:action => 'destroy', :id => params[:id]}) do |f| %> 

下面是控制器中的操作。

class PalletHistController < ApplicationController 

def destroy 
    @pallet_hist = PalletHist.find(params[:id]).destroy 
    flash[:notice] = "Entry '#{pallet_hist.id}' deleted successfully" 
    redirect_to(:action => 'index', :id => @pallet_hist.pallet_id) 
    end 
end 

我不明白爲什麼它仍然給我這個錯誤。

的routes.rb

Rails.application.routes.draw do 

    match ':controller(/:action(/:id))', :via => [:get, :post] 

    root 'pallets#index' 
end 

回答

1

對於銷燬操作,您希望在路由中使用delete HTTP方法。因此,對於一個自定義的路由(如果你不使用resources生成一組路線),它會是這樣的:

delete 'my_url', to: 'mycontroller#my_delete_action'

如果你使用resources它會給你指數顯示,新,創建,編輯,更新和銷燬路線。

此外,如果您的:url => {:action => 'destroy', :id => params[:id]}有效,我會感到驚訝。 url:選項應該包含銷燬操作的網址。所以如果你做了上面提到的那個自定義路由,那麼URL會更接近mycontroller_path,然後它應該有一個method: :delete。我可能在這最後一部分是錯的,但是我認爲如果我是對的,我會提供額外的信息。

編輯:

如果你需要的是一個刪除按鈕,那麼你可能不希望創建一個表單只是這一點。你最好使用鏈接。所以這會是這樣的:

<%= link_to 'Delete', mycontroller_path(object_to_destroy), method: :delete %> 

我希望這可以幫助。

+0

只是一個簡單的問題,當我將該中間行添加到路由文件中時,我會用什麼替換我的':url => {:action =>'destroy',:id => params [:id]}'? – Padagomez

+0

如果你只需要一個刪除按鈕,那麼你可能不想爲此創建一個表單。你最好使用鏈接。所以這將是這樣的: '<%= link_to'刪除',mycontroller_path(object_to_destroy),方法::刪除%>' – SRod

+0

如果我的答案適合你,這將是很好,如果你可以標記它的最佳答案:) – SRod

0

您需要將destroy操作添加到您的路線。

添加以下行:resources :pallet_histsconfig/routes.rb將解決problem.This將增加所有路由(updateindexcreate ...)。如果您只想添加destroy路線,則可以使用resources :pallet_hists, only: :destroy

相關問題