我会有一个用户模型的基本信息,然后是这样的:
class User has_many :course_students has_many :student_courses, through: :course_students, class_name: "Course" has_many :course_tutors has_many :tutored_courses, through: :course_tutors, class_name: "Course" end class Course has_many :course_students has_many :students, through: :course_students, class_name: "User" has_many :course_tutors has_many :tutors, through: :course_tutors, class_name: "User" end class CourseStudent belongs_to :course belongs_to :student, class_name: "User" end class CourseTutor belongs_to :course belongs_to :tutor, class_name: "User" end
这样,用户可以很容易地成为导师和学生,只需拥有共享信息即可。如果需要,我可能会插入专门的导师/学生模特。
我觉得它更好 Student 和 Tutor 继承你的 User 模型。您可以选择使用rails中的STI将数据保留在同一数据库表中。
Student
Tutor
User
这种方法将确保在您的域中明确分离责任,同时重新使用相同的身份验证(以及后来的授权)流程。