Ruby on rails 通过单个登录在Rails应用程序中创建多个用户角色(Rails Desive、Pundit、STI?帮助)

Ruby on rails 通过单个登录在Rails应用程序中创建多个用户角色(Rails Desive、Pundit、STI?帮助),ruby-on-rails,pundit,Ruby On Rails,Pundit,我目前是一名Rails noob,我一直在努力为这个特定的Rails应用程序绘制数据模型。我正在尝试构建一个业务员工/客户应用程序,其中有三种类型的用户(管理员、员工和客户) 管理员将完全控制他/她可以添加/编辑新员工和客户的位置(这将反过来为他们创建用户帐户)。员工可以查看自己的帐户详细信息,客户也可以查看 如何使用Rails Desive和pundit设置此功能?我在Google和stackoverflow上到处找过,最常见的解决方案似乎是使用一个用户模型,使用STI/pundit为用户设置

我目前是一名Rails noob,我一直在努力为这个特定的Rails应用程序绘制数据模型。我正在尝试构建一个业务员工/客户应用程序,其中有三种类型的用户(管理员、员工和客户)

管理员将完全控制他/她可以添加/编辑新员工和客户的位置(这将反过来为他们创建用户帐户)。员工可以查看自己的帐户详细信息,客户也可以查看


如何使用Rails Desive和pundit设置此功能?我在Google和stackoverflow上到处找过,最常见的解决方案似乎是使用一个用户模型,使用STI/pundit为用户设置角色,并限制对特定视图的访问。在我发疯之前,有人能帮我把它分解一下吗

通常,如果角色是独占的(意味着员工不能是管理员或客户,客户不能是管理员/员工等),您应该在您的
用户
模型上放置一个
角色:整数
列,即Rails枚举:

枚举角色:%i[客户员工管理员]

这可以通过您自己的自定义代码或类似的方式获得不同授权所需的内容(用户可以访问的内容)

如果您的用例需要一个角色来拥有不同的数据,您可以使用Users表进行单表继承,尽管我强烈建议避免STI


如果您的用户需要多于一个角色,并且每个角色需要不同的数据/行为,则可以考虑多态性关联。我之前写过一个关于这个问题的答案。

谢谢您的快速回复!在我的例子中,不同的角色确实需要不同的数据(例如需要支付信息和地址的客户)。我已经在我的应用程序中实现了STI。你强烈建议我不要使用它有什么具体的原因吗?我的性病经历每次都很不愉快。对于1:1 model:table,数据结构往往是最简单的关系结构。使用STI,模型和表会快速膨胀,最终会产生大量的空数据和复杂的模型逻辑,即使您正在进行适当的OOP。最后,似乎总有那么一天,两个相关的STI模型需要对同一列稍微不同的行为,这会使问题进一步复杂化,降低可预测性。有时候,这是我们最好的选择,所以如果你必须这样做的话,注意尽可能保持你的行为独立。