2016-05-27 5 views
0

私はルートを設定しています。私はdeleteメソッドにパラメータを渡したいと思います。Railsの特定のアクションにパラメータを正しく渡す方法

私は動作しません。それはこの試みた:...

namespace :admin do 
    resources :item do 
     get 'create_asset' 
     delete 'destroy_asset/:asset_id' 
    end 
    resources :asset 
end 

を、私はそれをやったが、それは適切な解決策のように見えないが

delete 'admin/items/:frame_id/destroy-asset/:asset_id' => 'admin/frames#destroy_asset'2, as: :destroy_asset 

どのようにすることができます私はそれを達成する?私はどこが間違っているのか理解できません。

答えて

0

まず、resources名前はそう:item:itemsなり、:assetあなたの質問に答えるために今:assets

になる、あなたがRESTfulなあなたのルートを維持するitems内部の巣assetsがすべき、複数でなければなりません。

これを試してみてください:

DELETE /admin/items/:item_id/assets/:id(.:format) assets#destroy 

このbefore_actionを含めるようにassets_controller.rbを更新します:

before_action :load_item 

... 

private 
    def load_item 
    @item = Item.find(params[:item_id]) 
    # If your models are namespaced too use this instead 
    # @item = Admin::Item.find(params[:item_id]) 
    end 

今、あなたは、単にのような削除アクションにリンクすることができます生成されます

namespace :admin do 
    resources :items do 
    resources :assets 
    end 
end 

this:

<%= link_to 'Destroy', admin_item_asset_path(@item.id, @asset.id), method: :delete, data: { confirm: 'Are you sure?' } %>

+0

ありがとうございます、それは間違いなくきれいに見えます!しかし、私は名前空間のために '@item = Admin :: Item.find(params [:item_id])'にするべきだと思います。 –

0

わかりました。別のアプローチを考えています。

この維持:

namespace :admin do 
    resources :item do 
     get 'create_asset' 
     delete 'destroy_asset' 
    end 
    resources :asset 
end 

それは通常のGETパラメータとしてdestroy_assetアクションにasset_idを渡すことpossibileです:

<%= link_to 'Destroy', admin_item_destroy_asset_path(@admin_item.id, asset_id: admin_asset.id), method: :delete, data: { confirm: 'Are you sure?' } %> 

ので、代わりに

admin/items/:item_id/destroy-asset/:asset_id 

の我々は

を持っています
admin/items/:item_id/destroy-asset?asset_id:XXX 
関連する問題