[英]Devise and multiple users models
我是Rails
新手,并尝试设置一个使用几种类型用户的应用程序: Teacher
, Student
, Admin
(可能还会更多)。
我想要不同模型的原因是因为各个用户的属性不同。 例如,“ Teacher
具有讲授的主题,专业和文凭。 而Student
和Admin
则没有。 学生可以留下对老师等的评论。
我想到了一个用于一般信息(例如姓名 , 电子邮件和其他联系信息)的一般User
模型,每种类型的用户都将继承该模型:
class Admin < User
end
class Teacher < User
end
class Student < User
end
等等。
我正在使用Devise
进行身份验证,并使用STI
通过表中的角色字段来区分用户角色。
问题是,当用户登录时,我该在哪里以及如何告诉我的应用程序生成正确类的current_user
? 我应该在哪里存储每种型号的其他信息(例如教师的职业)。 在用户表中?
例如,关于与对象之间的关系,老师有许多他教的话题。 如何确定只有老师有话题,没有学生?
我调查了CanCan,但完全感到困惑。
我的建议是:不要这样做! 您正在混合非常不同的关注点,最终会遇到臭名昭著的上帝对象。
用户仅用于身份验证,您不应将其与域模型混合使用。 教师/学生/管理员等应与用户分开使用。 您最终可以创建一个People表,并让Teacher Student和Admin继承自该表。
class Student < Person
或为每个表设置不同的表,这样就不会造成混乱(例如,某人可能既是教师又是管理员,分开的内容会使您的选择保持打开状态)
但是,无论您选择什么,都不要让用户参与其中!
如果要将用户绑定到教师/学生/管理员,请使用关联,并为每个关联指定一个user_id。
class Student < ActiveRecord::Base
belongs_to :user
end
请查看此链接。 希望这对您有帮助:
http://funonrails.com/2011/12/multiple-resources-registrations-with/
另外,您可以通过使模型(表)成为多态的来管理它们与对象的关系,例如:
# Topic Model:
belongs_to :readable, :polymorphic => true
Also in topic model there are two more fields:-
readable_id and readable_type.
# Teacher Model:
has_many :topics, as: :readable
# Sturdent Model:
has_many :topics, as: :readable
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.