AbstractController::ActionNotFound - 找不到操作 'destroy'
AbstractController::ActionNotFound - The action 'destroy' could not be found
我的 rails 应用程序遇到了一些问题。我检查了这个错误的其他问题,其中 none 个适用于我的应用程序。
我需要销毁一行,为此我将一个表单指向控制器中的操作 '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
您需要将 destroy
操作添加到路线中。
添加以下行:resources :pallet_hists
到您的 config/routes.rb
将解决 problem.This 将添加所有路由(update
、index
、create
...).
如果只想添加 destroy
路由,可以使用 resources :pallet_hists, only: :destroy
。
对于销毁操作,您想在路由中使用 delete
HTTP 方法。所以对于自定义路由(如果你不使用 resources
来生成一组路由)它会是这样的:
delete 'my_url', to: 'mycontroller#my_delete_action'
如果您要使用 resources
,它将为您提供索引、显示、新建、创建、编辑、更新和销毁路线。
此外,如果您的 :url => {:action => 'destroy', :id => params[:id]}
有效,我会感到很惊讶。 url:
选项 应该 包含销毁操作的 url。因此,如果您执行我上面提到的自定义路线,url 将更接近 mycontroller_path
,然后应该有一个 method: :delete
。我在最后一部分可能是错的,但我想我会提供额外的信息以防我是对的。
编辑:
如果您只需要一个删除按钮,那么您可能不想为此创建一个表单。你最好使用 link。所以这将是这样的:
<%= link_to 'Delete', mycontroller_path(object_to_destroy), method: :delete %>
希望对您有所帮助。
我的 rails 应用程序遇到了一些问题。我检查了这个错误的其他问题,其中 none 个适用于我的应用程序。
我需要销毁一行,为此我将一个表单指向控制器中的操作 '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
您需要将 destroy
操作添加到路线中。
添加以下行:resources :pallet_hists
到您的 config/routes.rb
将解决 problem.This 将添加所有路由(update
、index
、create
...).
如果只想添加 destroy
路由,可以使用 resources :pallet_hists, only: :destroy
。
对于销毁操作,您想在路由中使用 delete
HTTP 方法。所以对于自定义路由(如果你不使用 resources
来生成一组路由)它会是这样的:
delete 'my_url', to: 'mycontroller#my_delete_action'
如果您要使用 resources
,它将为您提供索引、显示、新建、创建、编辑、更新和销毁路线。
此外,如果您的 :url => {:action => 'destroy', :id => params[:id]}
有效,我会感到很惊讶。 url:
选项 应该 包含销毁操作的 url。因此,如果您执行我上面提到的自定义路线,url 将更接近 mycontroller_path
,然后应该有一个 method: :delete
。我在最后一部分可能是错的,但我想我会提供额外的信息以防我是对的。
编辑:
如果您只需要一个删除按钮,那么您可能不想为此创建一个表单。你最好使用 link。所以这将是这样的:
<%= link_to 'Delete', mycontroller_path(object_to_destroy), method: :delete %>
希望对您有所帮助。