¿Cómo limpio esta ruta de Rails anidada?

Tengo esta

devise_for :users
 resources :sites do
  resources :users
  get 'companies/search'
 end
 root :to => "welcome#index"
end

y las rutas se ven asi

       site_users GET    /sites/:site_id/users(.:format)            users#index
                  POST   /sites/:site_id/users(.:format)            users#create
    new_site_user GET    /sites/:site_id/users/new(.:format)        users#new
   edit_site_user GET    /sites/:site_id/users/:id/edit(.:format)   users#edit
        site_user GET    /sites/:site_id/users/:id(.:format)        users#show
                  PUT    /sites/:site_id/users/:id(.:format)        users#update
                  DELETE /sites/:site_id/users/:id(.:format)        users#destroy
 site_companies_search GET /sites/:site_id/companies/search(.:format)  sites/:site_id/companies#search
            sites GET    /sites(.:format)                           sites#index
                  POST   /sites(.:format)                           sites#create
         new_site GET    /sites/new(.:format)                       sites#new
        edit_site GET    /sites/:id/edit(.:format)                  sites#edit
             site GET    /sites/:id(.:format)                       sites#show
                  PUT    /sites/:id(.:format)                       sites#update
                  DELETE /sites/:id(.:format)                       sites#destroy
             root        /                                          welcome#index

Pero quiero saber si hay una manera de tener las rutas como esta

       site_users GET    /:site_id/users(.:format)            users#index
                  POST   /:site_id/users(.:format)            users#create
    new_site_user GET    /:site_id/users/new(.:format)        users#new
   edit_site_user GET    /:site_id/users/:id/edit(.:format)   users#edit
        site_user GET    /:site_id/users/:id(.:format)        users#show
                  PUT    /:site_id/users/:id(.:format)        users#update
                  DELETE /:site_id/users/:id(.:format)        users#destroy

Sin /sitios en la url, la url va de

/sites/some_name/users 
/sites/some_name/users/new

a

/some_name/users 
/some_name/users/new

eso limpiará la url si es posible

preguntado el 22 de mayo de 12 a las 21:05

2 Respuestas

resources :sites do
  get 'companies/search'
end
scope ':site_id' do
  resources :users
end
root :to => "welcome#index"

contestado el 22 de mayo de 12 a las 21:05

¿Funcionaría esto de la misma manera que /sites/1/users o hay un comportamiento diferente? Matt Elhotiby

también puedo usar un nombre en lugar de una identificación ... así que tal vez una identificación amigable - Matt Elhotiby

Sí, un nombre constante funcionaría. Esta es la nueva forma de hacer prefijos de la aplicación Rails. Sabía que el alcance se podía usar con una cadena constante, y solo descubrí que funcionaría con un :id al buscarlo. - marlín perforar

Si desea poder usar esto además de los mecanismos de carga de recursos como los recursos heredados y tener su site Acciones CRUD en /, puedes dibujar tus rutas como:

resources :sites, :path => "" do
  get 'companies/search'

  resources :users
end

root :to => "welcome#index"

contestado el 22 de mayo de 12 a las 22:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.