3

我正在使用 Devise 和 Rails 4。我想添加多个用户模型(管理员、用户类型 1、用户类型 2),以便它们从主用户模型继承。我搜索了很多帖子,得出的结论是我可能会使用我不想要的 CanCan,或者我可能会使用单表继承。

我看到它的方式是向我使用 Devise 创建的主要用户模型添加类型字符串列。我还需要从父类扩展每个子类,如下所示:

class Admin < User
end

class Usertype1 < User
end

class Usertype2 < User
end

我的问题是:接下来我该怎么做?我怎么知道如何访问类型列?我是否还需要为current_user辅助方法覆盖设计控制器,以便我可以拥有current_admin

4

3 回答 3

3

我不确定这是否真的回答了最初的问题。我正在尝试为 Devise 设置多个会话控制器,看起来它确实需要多个模型来处理这个用例。当我有一个工作版本时会发回。

于 2013-10-30T16:08:28.013 回答
1

您还可以使用 easy_roles gem。它可以在 github 上找到。此 gem 为您的不同用户角色提供了位掩码解决方案。你只需要一个模型,例如用户,这个模型得到一个属性“角色”。只需查看 github 上的文档即可。Devise + easy_roles + CanCan 是一个非常好的设置,在我看来非常方便。我经常使用这个。

github链接:https ://github.com/platform45/easy_roles

于 2013-08-05T22:52:46.037 回答
0

STI 会给你current_admin,current_user1current_user2Devise 方法。

application_controller.rb中,创建一个current_user像这样的自定义方法:

  def current_user
    if current_admin
      current_admin
    elsif current_user1
      current_user1
    else
      current_user2
    end
  end
helper_method :current_user

您将需要在 routes.rb 和自定义 session_controller.rb 上做一些工作。请参阅此处接受的答案Rails:使用带有单表继承的设计

于 2016-03-11T12:14:52.950 回答