Rails 4设计多个用户模型STI

时间:2013-08-05 18:01:00

标签: ruby-on-rails devise sti multiple-models

感谢阅读。

我正在使用Devise和Rails 4.我想添加多个用户模型(admin,usertype1,usertype2),以便它们从主用户模型继承。我搜索了很多帖子并得出结论,我可以使用CanCan,我不想要,或者我可以使用单表继承。

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

class Admin < User
end

class Usertype1 < User
end

class Usertype2 < User
end

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

再次感谢。

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

STI会为您提供current_admincurrent_user1current_user2设计方法。

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和自定义sessions_controller.rb上进行一些工作。请在此处查看已接受的答案Rails: Using Devise with single table inheritance