2010-09-26 18 views
5

Tengo un recurso anidado en mi routes.rb así:Rieles rutas raíz con recurso anidado

map.resources :users, :only => [:index] do |user| 
    user.resources :projects 
end 

que me da URL como /users/2/projects, que mostrará todos los proyectos propiedad de user 2. Después de un usuario ha iniciado sesión , Me gustaría que esta sea la página raíz, usando map.root. ¿Cómo establecería map.root para habilitar esto? Estoy usando el dispositivo, así que puedo obtener el usuario actual con current_user, pero no estoy seguro de que esté disponible en routes.rb.

+0

Qué acerca de la configuración de la página raíz de ser un redirector? ¿Y luego tener como 'Site :: home' redirigir al usuario a esa página? De esa forma, los invitados no se verán afectados. –

+0

@webdestroya - Eso podría funcionar. No tengo que preocuparme por los invitados; es un sitio privado por lo que cualquier persona que no haya iniciado sesión se redirige a una página de inicio de sesión. – Skilldrick

Respuesta

4

Estamos resolviendo esto con un controlador de página que presenta dos plantillas diferentes basadas en if current_user.

+0

Gracias por esto. Esperaba que routes.rb manejara cosas como esta, pero supongo que tiene sentido mantener ese tipo de lógica fuera de allí. Ordenado – Skilldrick

1

Se podría configurar la ruta a un controlador RootController en routes.rb junto con su ruta anidada existente:

map.root :controller => :root 

El controlador RootController 's index acción podría entonces hacer que la acción de la indexProjectsController:

class RootController < ApplicationController 
    def index 
    render :controller => :projects, :action => :index 
    end 
end 

Y, finalmente, ProjectsController haría uso de current_user para representar la lista adecuada de proyectos:

class ProjectsController < ApplicationController 
    def index 
    @projects = Project.all.find_by_user(current_user) 
    end 
end 

Esto pasa por alto los detalles de autenticación, etc.

0

puede redirigir a la página después de la autenticación en su método de filtro:

redirect_to user_projects_path(logged_in_user) 
Cuestiones relacionadas