【发布时间】:2019-11-06 23:12:06
【问题描述】:
我在我的应用程序中使用 devise 和 Pundit。我有很多用户,例如学生、教师、管理员、编辑。我在我的用户设计模型中添加了一个枚举角色。现在我不理解的部分是-学生将有自己的属性,同样,老师也将有自己的属性。例如,学生将有学校名称,而老师将有一个班级。现在,如果我将所有内容都放在用户模型中,我将有许多空值。我如何使用这个角色为每个角色创建一个模型,即学生、教师、赞助商,这样我就可以添加那些拥有各自学生、教师、赞助商模型的额外属性。任何帮助将不胜感激
枚举角色:[:teacher, :student, :sponsor, :admin]
预期结果:拥有一个具有与模型本身相关的属性的模型。例如。 Student 在其模型中将有一个名为 School 的列,而不是 User 模型。
【问题讨论】:
-
我进行了调查,发现 enum 角色将更适合我的方法,因为我将使用 Pundit 。此外,一个用户不能拥有多个角色。我不会使用多态或 STI。
-
您可以拥有一个基本的
User模型来处理身份验证,并将其与具有给定用户类型所需属性的适当StudentProfile、TeacherProfile等模型相关联 -
多表继承并不是 Rails 擅长的。我遇到过类似的问题,并且使用过像 active_record-acts_as 这样的宝石。如果它们足够不同以至于 STI 或枚举没有意义,那么接受一些重复的代码并制作单独的模型可能会更好。否则它会变得过于复杂。
-
正如@Jon 所提到的,您需要使用用户模型进行身份验证和授权,并将每个配置文件存储在需要验证的不同模型中。你需要为此使用多态。
标签: ruby-on-rails devise roles pundit