为用户创建具有不同功能的不同等级 (Rails)

Create different tiers with different features for users (Rails)

好的,所以我正在尝试构建这个 rails 应用程序,它有 2 种类型的用户,每种类型的用户都有不同的等级(青铜、白银、黄金)。我有很多目前可供所有人使用的功能,但我想将它们分开并从管理面板进行管理。因此,例如,青铜级将具有搜索功能,而银级将具有搜索功能和其他一些功能。

我的问题是最好和最有效的方法是什么?我如何将搜索功能关联到特定层级?在我创建一个新功能后,我如何将它添加到管理面板,这样我就可以将它与一个层相关联而无需硬编码(以防万一我以后想更改什么层有什么功能)

谢谢!

有很多方法可以解决这个问题。

最简单但可能不是最有效的方法是在用户模型上简单地设置一个 属性 来跟踪用户类型或层级。所以;

User.find(1).tier # = bronze 

会告诉您用户所在的层级。如果您有大量特定于层的数据,这很快就会变得低效。因此,青铜层需要的数据,但在任何其他层上都不需要 needed/wanted。在这种情况下,你需要有不同的模型来确保你的数据库中没有大量的空字段。所以你会认为你可以使用户的层成为子类。

class BronzeUser < User 

问题在于它在数据库中的存储方式。这使用了所谓的单一 Table 继承,这意味着您所有的 User 子类仍然使用相同的 table。尽管从代码的角度来看,这种方法很好,但您的数据库正走在变得不可持续和不可维护的良好道路上。

在我看来,解决这个问题的最好方法是让用户拥有自己的角色。 IE。创建与特定角色模型具有一对一关系的用户模型。

class Bronze < ApplicationRecord
      belongs_to :user 

甚至更好(取决于用例)是将角色实现为多态关联。这意味着您可以致电

User.find(1).tier 

并根据用户身份取回青铜、白银、黄金对象。尽管如果每一层的数据结构不同,这可能会增加很多混乱。

希望对您有所帮助。