使用Devise in Rails时是否需要“用户”控制器?

时间:2014-04-05 09:45:28

标签: ruby-on-rails-4 devise railstutorial.org

我是Rails的新手。我正在研究一个小型的Rails4项目,试图提高我的技能。 我正在松散地关注M.Hartl's tutorial

根据教程,构建了自定义用户身份验证。 但是,我想使用Devise进行用户身份验证。 我还需要像教程中那样拥有一个用户控制器吗? 在使用Devise时,我应该在哪些情况下使用/不使用Users控件?

关于本教程,我是否只是跳过控制器生成部分,还是必须将操作映射到Devise?

1 个答案:

答案 0 :(得分:42)

如果要与正常注册/更新过程分开管理用户,则只需要用户控制器。我有一个用户控制器,以便管理员可以独立于正常的设计注册/更新过程来管理(创建,编辑,更新,删除)用户。

与设计的冲突可能是因为你在路由文件中有devise_for :users …来设置设计,并且你的UsersController也有resources :users。这意味着设计和您的UsersController将尝试共享一些相同的/users路由。您需要通过更改其中一个映射到的路径将它们分开。例如,您可以在:path => 'u'语句中添加devise_for,以便将设计路由映射到/u,并且不会与/users上的UsersController冲突。或者,您可以单独保留devise_for(因此仍使用/users),而是将UsersController路由更改为例如resources :users_admin, :controller => 'users',这会将您的UsersControllers路由移动到{{1} }}。请注意,这会将路径助手从例如/users_admin更改为users_path

<强>更新

在您的评论/编辑之后,我已经快速浏览了本教程,我认为该设计基本上为您提供了与用户相关的功能的等效功能,该功能是从第5.4节到第9.1或9.2节开发的。 (加上一些额外的东西,例如,电子邮件确认,密码重置,帐户锁定等)。但是,如果您想尝试将Devise与该教程合并,那么这并不意味着它是该功能的替代品。有些东西看起来会起作用(例如Devise也定义了users_admin_path方法),但是路线等会有所不同,并且设计将东西分成更多的控制器(单独的控制器用于注册,登录/出,密码重置...)。管理类型功能(如第2.2,9.3,9.4节 - 创建/编辑/删除/列出其他用户)是我在我的应用程序中添加了单独的UsersController。 Devise没有定义UsersController,但如果你没有我上面提到的路径current_user,它会使用users路由。

所以,更具体地说:

  1. 如果您想启用管理员类型功能,允许查看/编辑/删除所有用户,您只需要一个UsersController。
  2. 如果你想在教程中使用设计,可能需要一些工作来按摩东西以适应,更改页面上的帮助链接等。抱歉,我不是更具体;我还没有完成那个教程。
  3. 你会错过自己手动完成的额外理解,但设计是一种流行的引擎,因此也很好。如果你有时间,你可以完全完成教程,然后再设计!它可以帮助你理解设计在幕后所做的一些事情。 P.S:查看设计源代码是有益的,即使你不能立即理解它。