如何在url

时间:2015-08-03 04:45:46

标签: ruby-on-rails ruby

我在使用命名空间时对rails中的路由有疑问。 示例代码:

namespace :api do
    # /api/... Api::
    namespace :v1 do
      devise_for :users, :controllers => {sessions: 'api/v1/users/sessions', :registrations => "api/v1/users/registrations", :password => 'api/v1/users/passwords'}
      resources :events do
        namespace :informations do
          resources :agendas
          resources :attendees
          resources :polls
          resources :presentatios
          resources :speakers
          resources :sponsors
          resources :votes
          resources :vote_options
        end
      end
    end
  end

我在控制台中使用grep议程检查我的网址,结果是:

/api/v1/events/:event_id/informations/agendas

如何在不从路由中删除命名空间的情况下从URL中删除命名空间信息?

1 个答案:

答案 0 :(得分:0)

您可以使用module选项将名称空间(如模块包装中)添加到控制器:

resources :events, module: 'v1/api'
    Prefix Verb   URI Pattern                Controller#Action
    events GET    /events(.:format)          v1/api/events#index
           POST   /events(.:format)          v1/api/events#create
 new_event GET    /events/new(.:format)      v1/api/events#new
edit_event GET    /events/:id/edit(.:format) v1/api/events#edit
     event GET    /events/:id(.:format)      v1/api/events#show
           PATCH  /events/:id(.:format)      v1/api/events#update
           PUT    /events/:id(.:format)      v1/api/events#update
           DELETE /events/:id(.:format)      v1/api/events#destroy

但使用没有版本化网址的版本化API控制器是没有意义的!除非您相信使用自定义请求标头或自定义接受类型,否则这是没有意义的。两者都有一些死硬的REST纯粹追随者,但由于他们太难以测试而现在很少。

http://www.troyhunt.com/2014/02/your-api-versioning-is-wrong-which-is.html