设计登录根路由轨道3

Olu*_*sen 35 ruby routes ruby-on-rails devise

嘿,伙计们.所以我想到了这个酷炫的想法,如果你登录然后你得到某种仪表板,否则你得到一个信息/登录/注册页面..所以我该怎么做..

我主要想在Routes中这样做=不是这样的


def index
  if current_user.present?
    render :action => 'logged_in'
  else
    render :action => 'logged_out'
  end
end
Run Code Online (Sandbox Code Playgroud)

提前致谢!

/ Oluf Nielsen

小智 80

认为你可能一直在寻找这个:

authenticated :user do
  root :to => "dashboard#show"
end

root :to => "devise/sessions#new"
Run Code Online (Sandbox Code Playgroud)

注意:它是验证*d*

  • 对于**Rails 4.0**,您必须确保路径助手具有唯一的名称,例如`root to:"dashboard#show",as :: authenticated_root`.否则,经过身份验证的根和正常的根路由最终会为其路径助手设置相同的名称,而Rails 4.0不再允许这样做. (27认同)
  • 我知道我迟到了,但是如果你使用```authenticated:user```(注意"d")它应该按预期工作 (5认同)

Sha*_*ney 25

我在我的应用程序中也想要这个,这就是我想出来的.

MyCoolioApp::Application.routes.draw do
  root :to => 'users#dashboard', :constraints => lambda {|r| r.env["warden"].authenticate? }
  root :to => 'welcome#index'

  get "/" => 'users#dashboard', :as => "user_root"

  # ..
end
Run Code Online (Sandbox Code Playgroud)

在Rails 3中,您可以使用基于请求的约束来动态映射您的root路线.上述解决方案适用于Devise身份验证gem,但可以进行修改以支持您自己的实现.

使用上述root_path/将路由到WelcomeController#index未经身份验证的请求的操作.当用户登录时,root_path将路由到UsersController#dashboard.

希望这可以帮助.


zez*_*zim 21

我有同样的问题,我解决了这个问题:

authenticated :user do
  root :to => "wathever#index"
end
unauthenticated :user do
  devise_scope :user do 
    get "/" => "devise/sessions#new"
  end
end
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你.

  • 这正是我所需要的.感谢发帖!! :) (4认同)
  • 这有效,但不是得到"/"=> ...我做了root:"设计/会话#new"它工作,可能是同样的事情 - 谢谢! (2认同)