0

I have an issue regarding shallow routing in rails. I have a set of routes nested 3 levels users have many portfolios have many displays. What i want to do is have a shallow route for my portfolios, but have verbose routing for displays. I've tried passing shallow: false but that doesnt seem to do anything

# config/routes.rb
resources :users do
  resources :portfolios, shallow: true do
    resources :displays #shallow: false
  end
end

for my users and portfolios, this works the way i want

#users routes
/users      #index
/users/:id  #show

#portfolios routes
/users/:user_id/portfolios #index
/portfolios/:id            #show

however, from here i want verbose displays keyed off the shallow portfolio

#desired display routes
/portfolios/:portfolio_id/displays     #index
/portfolios/:portfolio_id/displays/:id #show

#actual display routes
/portfolios/:portfolio_id/displays     #index
/displays/:id                          #show

Is there a way to utilize the shallow configuration in this way?

PhilVarg
  • 4,762
  • 2
  • 19
  • 37

1 Answers1

2
Rails.application.routes.draw do
  # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
  resources :users do
    resources :portfolios, shallow: true 
  end
  resources :users, only: [] do
    resources :portfolios, only: [] do
      resources :displays
    end
  end
end

Here are the routes

                     Prefix Verb   URI Pattern                                                          Controller#Action
            user_portfolios GET    /users/:user_id/portfolios(.:format)                                 portfolios#index
                            POST   /users/:user_id/portfolios(.:format)                                 portfolios#create
         new_user_portfolio GET    /users/:user_id/portfolios/new(.:format)                             portfolios#new
             edit_portfolio GET    /portfolios/:id/edit(.:format)                                       portfolios#edit
                  portfolio GET    /portfolios/:id(.:format)                                            portfolios#show
                            PATCH  /portfolios/:id(.:format)                                            portfolios#update
                            PUT    /portfolios/:id(.:format)                                            portfolios#update
                            DELETE /portfolios/:id(.:format)                                            portfolios#destroy
                      users GET    /users(.:format)                                                     users#index
                            POST   /users(.:format)                                                     users#create
                   new_user GET    /users/new(.:format)                                                 users#new
                  edit_user GET    /users/:id/edit(.:format)                                            users#edit
                       user GET    /users/:id(.:format)                                                 users#show
                            PATCH  /users/:id(.:format)                                                 users#update
                            PUT    /users/:id(.:format)                                                 users#update
                            DELETE /users/:id(.:format)                                                 users#destroy
    user_portfolio_displays GET    /users/:user_id/portfolios/:portfolio_id/displays(.:format)          displays#index
                            POST   /users/:user_id/portfolios/:portfolio_id/displays(.:format)          displays#create
 new_user_portfolio_display GET    /users/:user_id/portfolios/:portfolio_id/displays/new(.:format)      displays#new
edit_user_portfolio_display GET    /users/:user_id/portfolios/:portfolio_id/displays/:id/edit(.:format) displays#edit
     user_portfolio_display GET    /users/:user_id/portfolios/:portfolio_id/displays/:id(.:format)      displays#show
                            PATCH  /users/:user_id/portfolios/:portfolio_id/displays/:id(.:format)      displays#update
                            PUT    /users/:user_id/portfolios/:portfolio_id/displays/:id(.:format)      displays#update
                            DELETE /users/:user_id/portfolios/:portfolio_id/displays/:id(.:format)      displays#destroy
fossil
  • 740
  • 6
  • 17