2011-10-25 13 views
5

¿Está bien poner lógica personalizada en routes.rb?Rutas rutas lógica

Por ejemplo:

unless current_user 
    root :to => anonymous_page 
else 
    root :to => logged_in_page 
end 

Respuesta

2

puede poner la lógica personalizada en las rutas ... pero como sugirió un vengador - "current_user" no funcionará debido a que cuando se carga el archivo de rutas. A veces utilizamos la lógica en nuestro archivo de ruta (por ejemplo, configurar rutas que solo están disponibles si RAILS_ENV == 'desarrollo').

Lo que probablemente quiere es un before_filter en "anonymous_page", por ejemplo:

before_filter :redirect_if_logged_in, :only => :anonymous_page 

def redirect_if_logged_in 
    redirect_to logged_in_page if current_user.present? 
end 
2

que no funciona de esa manera. Las rutas se leen/crean al inicio del servidor, no por solicitud. Tal lógica debes ponerla en los controladores.

+0

Nota: ese dispositivo hace algo para que la magia suceda aquí: https://github.com/plataformatec/devise/wiki/How-To:-Define-a-different-root-route-for-logged-in- usuarios externos – Jonathan

0

Usted puede usar la gema espacio libre para hacer lo que está pensando. A partir de la documentación de despacho:

Blog::Application.routes.draw do 
    constraints Clearance::Constraints::SignedIn.new { |user| user.admin? } do 
    root to: 'admin' 
    end 

    constraints Clearance::Constraints::SignedIn.new do 
    root to: 'dashboard' 
    end 

    constraints Clearance::Constraints::SignedOut.new do 
    root to: 'marketing' 
    end 
end 

Esto funciona porque aclaramiento se suma a la pila de middleware, haciendo firmado en estado disponible antes rutas se procesan.