2011-12-26 23 views
7

Có cách nào để truy cập người dùng hiện tại trong routes.rb không? Tôi muốn một bản đồ như thế này:Devise current_user trong các tuyến đường.rb

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

env['warden'] dường như không được thiết lập, vì vậy tôi không thể truy cập warden.user.name.

Trả lời

4

Để mở rộng về câu trả lời user1136228 của:

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

Không chắc chắn điều đó là có thể. Tuy nhiên, bạn có thể sử dụng bộ điều khiển:

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

Cảm ơn, tôi đã làm điều này và đó là một cách giải quyết tốt, nhưng lặp lại khi bạn có nhiều URL tiện lợi liên quan đến người dùng hiện tại (edit_profile_path, v.v.). – mahemoff

+0

mọi thứ luôn có thể đạt được và có thể đạt được. – sidney

2

Hai khả năng là. Nếu bạn đang sử dụng đưa ra bạn có thể sử dụng cai ngục như vậy:

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

hoặc không có cai ngục

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

nếu bạn lưu trữ id của người dùng của bạn trong phiên của: user_id

+0

Tôi không thấy cách hoạt động của nó trong routes.rb. – mahemoff

+2

Bạn có thể thêm constaraint trong routes.rb – user1136228

Các vấn đề liên quan