如何将参数正确传递给Rails中的特定操作

时间:2016-05-27 10:47:00

标签: ruby-on-rails routing

我设置了路由,我想将参数传递给delete方法。

我已经尝试过这项不起作用的事情:

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

我怎样才能实现它?我无法理解我错在哪里。

2 个答案:

答案 0 :(得分:0)

好的,我想出了一个不同的方法。

保持这个:

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

可以将asset_id传递给destroy_asset操作作为正常的get参数:

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

答案 1 :(得分:0)

首先,initAutocomplete名称必须为复数,因此resources成为:item:items成为:asset

现在回答你的问题,你应该在:assets内嵌套assets以保持你的路线RESTful。

试试这个:

items

将生成:

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

更新您的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