Rails路由:重定向整个资源

时间:2016-06-06 13:11:44

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

我知道重定向特定路线:

put 'users/:user_id', to: redirect('/api/v1/users/:user_id')

如何将重定向应用于resources生成的所有路由?寻找像

这样的东西
resources :users, to: redirect('/api/v1')

我可以使用匹配来实现变通方法,但它有点笨重:

match 'users/*path', to: redirect('/api/v1/users/%{path}'), via: [:GET, :POST, :PUT, :DELETE]

2 个答案:

答案 0 :(得分:0)

我最近使用以下代码将 provider_apps 资源重命名为 apps,该代码保留了查询参数,这与问题中提出的解决方案不同:

# routes.rb
get 'provider_apps/:slug', status: :moved_permanently, to: redirect { |path_params, request|
    query_string = URI(request.url).query
    "/apps/#{ path_params[:slug] }#{ "?#{ query_string }" if query_string }"
  }

这是受the block example in Rails routing docs启发的。如果与目标路线相关,您还可以使用 request.query_parameters 获取查询参数的哈希值。

答案 1 :(得分:-1)

也许尝试这样的事情:

namespace :api, defaults: { format: :json } do
  namespace :v1 do
    resources :users
  end
end

那会给你

      api_v1_users GET       /api/v1/users(.:format)                      api/v1/users#index {:format=>:json}
                   POST      /api/v1/users(.:format)                      api/v1/users#create {:format=>:json}
   new_api_v1_user GET       /api/v1/users/new(.:format)                  api/v1/users#new {:format=>:json}
  edit_api_v1_user GET       /api/v1/users/:id/edit(.:format)             api/v1/users#edit {:format=>:json}
       api_v1_user GET       /api/v1/users/:id(.:format)                  api/v1/users#show {:format=>:json}
                   PATCH     /api/v1/users/:id(.:format)                  api/v1/users#update {:format=>:json}
                   PUT       /api/v1/users/:id(.:format)                  api/v1/users#update {:format=>:json}
                   DELETE    /api/v1/users/:id(.:format)                  api/v1/users#destroy {:format=>:json}

编辑:

namespace :api, path: nil, defaults: { format: :json } do
  namespace :v1, path: nil do
    resources :users
  end
end

那会给你

           api_v1_users GET       /users(.:format)                             api/v1/users#index {:format=>:json}
                        POST      /users(.:format)                             api/v1/users#create {:format=>:json}
        new_api_v1_user GET       /users/new(.:format)                         api/v1/users#new {:format=>:json}
       edit_api_v1_user GET       /users/:id/edit(.:format)                    api/v1/users#edit {:format=>:json}
            api_v1_user GET       /users/:id(.:format)                         api/v1/users#show {:format=>:json}
                        PATCH     /users/:id(.:format)                         api/v1/users#update {:format=>:json}
                        PUT       /users/:id(.:format)                         api/v1/users#update {:format=>:json}
                        DELETE    /users/:id(.:format)                         api/v1/users#destroy {:format=>:json}