我的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
对于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_to 'Delete', mycontroller_path(object_to_destroy), method: :delete %>
你需要把你的destroy
动作添加到你的路由中。
添加以下行:resources :pallet_hists
到您的config/routes.rb
将解决问题。这将添加所有路由(update
, index
, create
…)。
如果您只想添加destroy
路由,可以使用resources :pallet_hists, only: :destroy