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

Xax*_*xum 4 indexing routes ruby-on-rails-3

首先,我尝试访问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
Run Code Online (Sandbox Code Playgroud)

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

Log*_*ger 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"
Run Code Online (Sandbox Code Playgroud)

重要的是要注意两件事:首先,订单在这里很重要; 第二,除非你打算进一步使用约束(我总是这样做),否则可以将约束重构为单行路由.

  • 这里有一个很好的帖子,有一个完整的例子http://collectiveidea.com/blog/archives/2011/05/31/user-centric-routing-in-rails-3/ (2认同)