如何在rails资源中指定映射到DELETE谓词的两个操作?

时间:2014-02-13 10:12:50

标签: ruby-on-rails ruby-on-rails-4 routing

我有一个基于Matteo Melanis blog post的api令牌控制器。我想向控制器添加两个自定义操作registerunregister,因此看起来像这样的路径

namespace :api do
  namespace :v1  do
    resources :tokens,:only => [:create, :destroy]
  end
end

现在变成了这个

namespace :api do
  namespace :v1  do
    resources :tokens do
      put 'register', on: :member, as: :register
      delete 'unregister', on: :member, as: :unregister
    end
  end
end

这是我发现不允许unregister取消与destroy动词相关联的CRUD DELETE操作的唯一方法。我试着做

resources :tokens, :only => [:create, :destroy, :register, :unregister] do

在上面的代码中,以及与块并行定义resources :tokens,:only => [:create, :destroy]。然而,我得到了不受欢迎的所有CRUD +自定义操作,或者其中一个自定义操作覆盖了CRUD操作。

简而言之,我想以

结束
     register_api_v1_token PUT    /api/v1/tokens/:id/register(.:format)   api/v1/tokens#register
   unregister_api_v1_token DELETE /api/v1/tokens/:id/unregister(.:format) api/v1/tokens#unregister
             api_v1_tokens GET    /api/v1/tokens(.:format)                api/v1/tokens#index
                           POST   /api/v1/tokens(.:format)                api/v1/tokens#create
                           DELETE /api/v1/tokens/:id(.:format)            api/v1/tokens#destroy

这是可能的,如果是的话:我怎么能这样做?

1 个答案:

答案 0 :(得分:1)

这应该有效:

resources :tokens, only: [:create, :destroy] do
  member do
    put 'register'
    delete 'unregister'
  end
end