首先,我尝试访问routes.rb文件中的session变量,然后输入一个简单的if语句。如果用户已登录,请转到#index,然后转到登陆#index。但是,routes.rb似乎无法访问会话变量。我设置了会话[:user_id],可以用它来验证登录状态。最好是在routes.rb中将已注销的页面设置为home,然后在用户登录时在该控制器中重定向,或者是否有更好的方法我不知道?
以下是我在控制器中为已注销的用户主页所做的操作。
def index
if User.find_by_id(session[:user_id])
redirect_to entry_url
end
end
它工作正常,但不确定是否有任何问题或更好的方式。任何想法都将不胜感激。
答案 0 :(得分:7)
路由实际上可以访问会话变量。您可以设置约束以将登录用户路由到不同的根,如下所示:
# Logged in
constraints lambda { |req| !req.session[:user_id].blank? } do
root :to => "entry#index", :as => "dashboard"
end
# Not logged in
root :to => "landing#index"
重要的是要注意两件事:首先,订单在这里很重要;第二,除非你打算进一步使用约束(我总是这样做),否则可以将约束重构为单行路径。
答案 1 :(得分:1)
当然,它应由您的控制器处理,而不是由您的路线处理。
def index
@user = User.find_by_id(session[:user_id])
if @user
redirect_to entry_url
else
redirect_to landing_url
end
end