Rails:将命名空间添加到资源

时间:2015-09-30 09:35:37

标签: ruby-on-rails routes

我目前在我的routes.rb

中有这个
namespace :api
  namespace :v1
   namespace :me
    # ...
    resources :offers do
     resources :state, only: %i(index)
    end
  end
 end
end

这给了我这条路线:

GET v1/me/offers/:offer_id/state(.:format)
api/v1/me/state#index

但我想要的路线就是这个:

GET v1/me/offers/:offer_id/state(.:format)
api/v1/me/offers/state#index

简单地说,我希望能够将state_controller.rb放在offers文件夹中,而无需更改访问它的路径。 我怎样才能做到这一点?

3 个答案:

答案 0 :(得分:1)

您应该明确定义资源的控制器:

resources :state, controller: 'offers/state'

这会将请求路由到app/controllers/api/v1/me/offers/state_controller.rb

答案 1 :(得分:1)

我找到了更好的方法:使用module

resources :offers, module: :offers do
  resources :state, only: %i(index)
end

答案 2 :(得分:0)

namespace :api
  namespace :v1
   namespace :me
    # ...
    resources :offers do
      namespace :offers, path: "" do
        resources :state, only: %i(index)
      end
    end
  end
 end
end