Rails 3根据登录状态拥有两个不同主页的最佳方式

时间:2011-08-09 15:21:50

标签: ruby-on-rails-3 indexing routes

首先,我尝试访问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

它工作正常,但不确定是否有任何问题或更好的方式。任何想法都将不胜感激。

2 个答案:

答案 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