2011-12-26 7 views
7

Esiste un modo per accedere all'utente corrente in routes.rb? Vorrei una mappatura come questo:Devise current_user in routes.rb

match /profile => redirect("/profiles/{current_user.name}") 

env['warden'] non sembra essere impostato, quindi non posso accedere warden.user.name.

risposta

4

Ad ampliare la risposta di user1136228:

get '/profile', to: redirect { |params, request| 
    me = request.env["warden"].user(:user) 
    me ? ('/profiles/' + me.name) : '/' 
} 
7

Non sono sicuro che sia possibile. Tuttavia, è possibile utilizzare un controller:

def profile 
    if signed_in? 
     redirect_to user_profile_path(current_user) 
    else 
     redirect_to root_url 
    end 
end 
+0

Grazie, ho fatto questo ed è una soluzione decente, ma diventa ripetitivo quando si hanno più URL di comodità relativi all'utente corrente (edit_profile_path, ecc.). – mahemoff

+0

tutto è sempre possibile e realizzabile. – sidney

2

Sono due possibilità. Se si utilizza escogitare è possibile utilizzare warden in questo modo:

current_user = request.env["warden"].user(:user) 

o senza guardiano

User.find_by_id(request.session[:user_id]) 

se si memorizza l'identificativo del tuo utente nella sessione: ID_utente

+0

Non vedo come funzioni in routes.rb. – mahemoff

+2

È possibile aggiungere costanza in routes.rb – user1136228

Problemi correlati