2017-12-28 26 views
0

チェックボックスに基づいて項目の集合を削除しようとしています。私はカスタムルートを作成しました。 destroy_multipleルート。Railsのフォームタグは経路を削除してカスタム経路には行きません。代わりに標準経路を削除します

私は熊手ルートを実行すると、私は結果としてこれを取得
Rails.application.routes.draw do 
    resources :projects do 
    resources :lists, shallow: true do 
     member do 
     post :sort 
     end 
     resources :items, shallow: true 
    end 
    end 

    resources :items do 
    collection do 
    delete :destroy_multiple, :as => :destroy_multiple 
    end 
    end 
    resource :react 
end 

Prefix Verb URI Pattern        Controller#Action 
      sort_list POST /lists/:id/sort(.:format)     lists#sort 
      list_items GET /lists/:list_id/items(.:format)   items#index 
         POST /lists/:list_id/items(.:format)   items#create 
     new_list_item GET /lists/:list_id/items/new(.:format)  items#new 
      edit_item GET /items/:id/edit(.:format)     items#edit 
        item GET /items/:id(.:format)      items#show 
         PATCH /items/:id(.:format)      items#update 
         PUT /items/:id(.:format)      items#update 
         DELETE /items/:id(.:format)      items#destroy 
     project_lists GET /projects/:project_id/lists(.:format)  lists#index 
         POST /projects/:project_id/lists(.:format)  lists#create 
     new_project_list GET /projects/:project_id/lists/new(.:format) lists#new 
      edit_list GET /lists/:id/edit(.:format)     lists#edit 
        list GET /lists/:id(.:format)      lists#show 
         PATCH /lists/:id(.:format)      lists#update 
         PUT /lists/:id(.:format)      lists#update 
         DELETE /lists/:id(.:format)      lists#destroy 
       projects GET /projects(.:format)      projects#index 
         POST /projects(.:format)      projects#create 
      new_project GET /projects/new(.:format)     projects#new 
      edit_project GET /projects/:id/edit(.:format)    projects#edit 
       project GET /projects/:id(.:format)     projects#show 
         PATCH /projects/:id(.:format)     projects#update 
         PUT /projects/:id(.:format)     projects#update 
         DELETE /projects/:id(.:format)     projects#destroy 
destroy_multiple_items DELETE /items/destroy_multiple(.:format)   items#destroy_multiple 
       items GET /items(.:format)       items#index 
         POST /items(.:format)       items#create 
       new_item GET /items/new(.:format)      items#new 
         GET /items/:id/edit(.:format)     items#edit 
         GET /items/:id(.:format)      items#show 
         PATCH /items/:id(.:format)      items#update 
         PUT /items/:id(.:format)      items#update 
         DELETE /items/:id(.:format)      items#destroy 
       react POST /react(.:format)       reacts#create 
      new_react GET /react/new(.:format)      reacts#new 
      edit_react GET /react/edit(.:format)      reacts#edit 
         GET /react(.:format)       reacts#show 
         PATCH /react(.:format)       reacts#update 
         PUT /react(.:format)       reacts#update 
         DELETE /react(.:format)       reacts#destroy 

そして、私のformタグはこのようになります。..

<%= form_tag url_for(:controller => 'items', :action => 'destroy_multiple'), :method => 'delete' do %> 

    <ul class="list-group sortable" data-update-url="<%= sort_list_path(list) %>"> 
    <%= render list.items %> 
    </ul> 
    <%= submit_tag("Delete Items") %> 
<% end %> 

私はすべてのエラーを得ていないのですが、それはあります正しいコントローラーアクションには行かないので、それは単なるアイテムの破棄アクションで終わります。ここに私のコントローラがあります。 クラスItemsController < ApplicationControllerに

before_action :set_item, only: [:edit, :update] 

    def create 
    @list = List.find(params[:list_id]) 
    @item = @list.items.create params[:item].permit(:content) 
    end 

    def edit 
    end 

    def update 
    @item.update_attributes(params[:item].permit(:content)) 
    end 

    def destroy 
    @item.destroy 
    end 

    def destroy_multiple 

    debugger 
    end 

    private 

    def set_item 
    @item = Item.where(id: params[:id]).first! 
    end 

end 

私は、カスタムdestroy_multipleアクションに行くために、フォームの提出を求めています。私はどんな助けにも感謝します。ありがとうございました。

+1

あなたのアイテムのリソースを2回宣言します。最初はリストの中にあり、2番目はリストの中にあります。ネストされたアイテムリソース内でカスタム削除ルートを移動してみてください。 –

+0

恐ろしい!それはうまくいった。私は助けに感謝します。 – Spikerr

+0

すごくうれしいです。回答を表示するには投稿を編集する必要があります。 –

答えて

1

@ JoshHumphreyによると、私のエラーには複数のルートがあります。私の更新されたルート・ファイルは

Rails.application.routes.draw do 
    resources :projects do 
    resources :lists, shallow: true do 
     member do 
     post :sort 
     end 
     resources :items, shallow: true do 
     collection do 
      delete :destroy_multiple, :as => :destroy_multiple 
     end 
     end 
    end 
    end 


    resource :react 
end 

であると私はそうここにリストIDを伝承するためのフォームを少し更新フォーム

<%= form_tag(destroy_multiple_list_items_path(list_id: list.id),method: :delete,remote: true) do %> 
    <ul class="list-group sortable" data-update-url="<%= sort_list_path(list) %>"> 
    <%= render list.items %> 
    </ul> 
    <%= submit_tag("Delete Selected", :class => "btn btn-warning") %> 
<% end %> 

は、他のすべてが同じとどまったです!ジョシュ助けてくれてありがとう。

0

あなたが従うことを試みることができ、最初にあなたがルートを作成し、元のdestroyアクション

resources :items do 
collection do 
    #delete :destroy_multiple, :as => :destroy_multiple 
    delete '/destroy_multiple/:id(.:format)' => 'items#destroy_multiple', constraints: { id: /.*/ }, as: :destroy_multiple 
    end 
end 

今すぐrake routesを実行するようにあなたは、このような何かを得る(テストしていないルートが、コードを、今ある)

destroy_multiple_items DELETE /items/destroy_multiple/:id(.:format)   items#destroy_multiple 

今、あなたは、チェックボックス

def destroy_multiple 
    Item.where(id: params[:id]).destroy_all 
    # redirect 
end 

Hを使用して削除しようとすることができますope to help

関連する問題