如何使用Devise gem创建用户根路径路径?

时间:2014-09-13 21:44:08

标签: ruby-on-rails ruby devise

我进行了搜索并在SO上找到this question,但接受的答案对我来说似乎没有用。基本上,Divise wiki说......

  

登录用户后,确认帐户或更新帐户   密码,Devise将寻找重定向的作用域根路径。对于   例如,对于a:user资源,如果使用user_root_path   存在,否则将使用默认的root_path。

凭借我对RoR的业余知识,我有一个名为Player的设计模型,我在routes.rb文件中创建了以下语句......

match 'player_root', to: 'pages#play', as: :player_root, via: :all

...但有了这个,我的应用程序总是重定向到我的根路径,而不是我上面定义的玩家根路径。我做错了什么?

提前感谢您的智慧!另外,我正在使用Ruby 2和Rails 4。

2 个答案:

答案 0 :(得分:1)

据我了解,您正在尝试为root_path指定:players

如果要这样做,您可以使用以下内容:

authenticated :players do
  root to: 'pages#play', as: :authenticated_root
end

这将为您登录的用户(玩家)提供自定义root_path。

答案 1 :(得分:0)

除了Andrey Dieneko之外,还有其他两个选项:

  
      
  1. 使用unauthenticated_path
  2.   
  3. 在控制器中使用authenticate_user!
  4.   

这里的底线是你可能在想错误。您可能正在尝试找出用户的位置,如果经过身份验证。但是,可能更适合在控制器中实际使用身份验证方法来测试用户是否已登录,如果没有将其路由到登录页面:

#config/routes.rb
root to: "players#play"

#app/controllers/players_controller.rb
class PlayersController < ApplicationController
    before_action :authenticate_user!
end

这将使用户进入&#34;登录&#34;路径,如果他们没有登录。

或者,您可以像这样使用unauthenticated_path

#config/routes.rb
root to: "players#play"

unauthenticated do
   root to: "application#landing"
end

-

这种方法最好只有你有Facebook这样的应用程序(IE没有&#34;登陆页面&#34;等)

我认为Andrey's答案更贴切(特别是如果您有登录页面)