AbstractController :: ActionNotFound - 动作' destroy'无法找到

时间:2015-08-14 23:12:27

标签: ruby-on-rails ruby controller destroy

我的rails应用程序遇到了一些问题。我检查了这个错误的其他问题,但没有一个适用于我的应用程序。

我需要摧毁一行,为此我将表格指向行动“摧毁”。在我的控制器内。

这是我指导的地方。

<%= 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

2 个答案:

答案 0 :(得分:1)

对于销毁操作,您希望在路由中使用delete HTTP方法。因此,对于自定义路线(如果您未使用resources生成一组路线),它将类似于:

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

如果您使用resources,它会为您提供索引,显示,新建,创建,编辑,更新和销毁路线。

另外,如果你的:url => {:action => 'destroy', :id => params[:id]}有效,我会感到惊讶。 url:选项应该包含销毁操作的网址。因此,如果您执行了我上面提到的自定义路线,则网址会更接近mycontroller_path,然后应该有method: :delete。在最后一部分我可能是错的,但我想如果我正确的话,我会提供额外的信息。

编辑:

如果您只需要一个删除按钮,那么您可能不想为此创建表单。你最好使用链接。所以这就像是:

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

我希望这会有所帮助。

答案 1 :(得分:0)

您需要将destroy操作添加到路线中。

添加以下行:resources :pallet_histsconfig/routes.rb解决问题。这将添加所有路线(updateindexcreate .. )。

如果您只想添加resources :pallet_hists, only: :destroy路线,则可以使用destroy