2012-01-17 3 views
8

Utilizzo Rails 3 e Devise per creare un'app in cui gli utenti arrivano al sito Web e viene visualizzata una home page contenente un login e un modulo di registrazione. Questa pagina ha il suo controller ("home page"), quindi è percorso èRails 3 w/Devise: Come impostare due home page separate in base al fatto che l'utente sia autenticato o meno?

root :to => "homepage#index" 

Voglio visualizzare una home page diversa se gli utenti sono già registrati. Questo spiegherebbe ad avere il punto di root per

root :to => "dashboard#index" 

C'è un modo per avere un percorso condizionale in routes.rb, che mi permetterebbe di verificare se l'utente è autenticato prima di indirizzarlo a una di quelle home page?

Ho provato a utilizzare il seguente codice, ma se non sono connesso, idea mi chiede di accedere, quindi chiaramente solo il primo percorso funziona.

authenticate :user do 
    root :to => "dashboard#index" 
end 
    root :to => "homepage#index" 

Inoltre, voglio l'url per puntare a www.example.com in entrambi i casi, in modo che www.example.com/dashboard/index e www.example.com/homepage/index mai appaiono nel browser.

Grazie mille !!!

risposta

13

Prova questa, è specifico per Warden/Definire però.

root to: "dashboard#index", constraints: lambda { |r| r.env["warden"].authenticate? } 
root to: "homepage#index" 
+0

Grazie mille @Bradley, questo mi stava uccidendo :) –

+0

Faccio lo stesso, ma sia l'utente che ha effettuato l'accesso che l'utente non loggato hanno usato il dashboard # index –

+1

Attenzione: questo non funziona con Rails 4, viene visualizzato un errore che dice: 'Nome percorso non valido, già in uso: 'root'' – Happynoff

5

Nel vostro HomeController:

def index 
    if !user_signed_in? 
    redirect_to :controller=>'dashboard', :action => 'index' 
    end 
end 
+0

grazie per la risposta @negarnil. Il fatto è che ho provato questa opzione ma non riscrive l'url. Desidero che www.example.com indichi entrambe le pagine in modo che www.example.com/dashboard/index non venga mai mostrato –

+0

Prova rendering: action => 'dashboard.html.erb. http://guides.rubyonrails.org/layouts_and_rendering.html#wrapping-it-up –

2

(esatta stessa domanda ha risposto qui: https://stackoverflow.com/a/16233831/930038 Aggiunta la risposta anche qui per riferimento altri..)

Nel vostro routes.rb:

authenticated do 
    root :to => 'dashboard#index' 
end 

root :to => 'homepage#index' 

Questo farà sì che root_url per tutti autenticato utenti è dashboard#index

Per il vostro riferimento: https://github.com/plataformatec/devise/pull/1147

+0

In Rails 4 questo non funziona. Devi rinominare uno dei due percorsi. Vedi la mia [risposta] (http://stackoverflow.com/a/19090936/1836143). –

2

Ecco la risposta corretta con le rotaie 4

root to: 'dashboard#index', constraints: -> (r) { r.env["warden"].authenticate? }, 
     as: :authenticated_root 
root to: 'homepage#index' 

ho cercato di aggiungere questo al/modificare la risposta accettata ma è troppo di una modifica per essere accettato a quanto pare. Ad ogni modo, vota la risposta accettata (da Bradley), mi ha aiutato a trovare questo :)

Problemi correlati