好的所以我正在尝试构建这个有两种类型用户的rails应用程序,每种类型的用户都有不同的层(青铜,银牌,金牌)。我有一堆当前可供所有人使用的功能,但我想将它们拆分并从管理面板进行管理。例如,青铜层将具有搜索功能,银层将具有搜索功能和其他一些功能。
我的问题是,最好和最有效的方法是什么?如何将搜索功能与特定层相关联?在我创建一个新功能之后,我如何将其添加到管理面板中,这样我就可以将其与没有硬编码的层相关联(以防我以后想要更改哪个层具有哪些功能)
谢谢!
答案 0 :(得分:0)
你可以通过很多方式解决这个问题。
最简单但最有效的方法是在User模型上只有一个跟踪用户类型或层的属性。所以;
User.find(1).tier # = bronze
会告诉您用户所在的等级。如果您有大量特定于层的数据,这很快就会变得低效。因此,青铜级所需的数据,但在任何其他级别上不需要/想要的数据。在这种情况下,您需要具有不同的模型以确保数据库中没有空字段。所以你会认为你可以创建用户的层子类。
class BronzeUser < User
这个问题是它如何存储在数据库中。这使用所谓的单表继承,这意味着用户的所有子类仍然使用相同的表。虽然代码方法这个方法很好,但是你的数据库正处于变得不可持续和不可维护的良好道路上。
在我看来,解决此问题的最佳方法是让用户拥有自己的角色。 I.E.创建与特定角色模型具有一对一关系的用户模型。
class Bronze < ApplicationRecord
belongs_to :user
甚至比那更好(取决于用例)将角色实现为多态关联。这意味着你可以打电话
User.find(1).tier
根据用户的不同,取回Bronze,Silver,Gold对象。虽然如果每个层的数据结构不同,这可能会增加很多混乱。
希望有所帮助。