Настройка моделей для сайта репетитора

Мне интересно, как лучше всего было бы настроить модели в Ruby on Rails для учебного веб-сайта.

Я хотел бы, чтобы пользователи регистрировались (я не имею в виду какой-то конкретный способ, но я предполагаю, что пойду с одним из самых популярных драгоценных камней в рубине). Затем они могут выбрать, быть ли репетиторами или студентами, или и тем, и другим. Должен ли я создать модель для наставников, модель для студентов и заставить их наследовать основную информацию из аутентификации? Или было бы лучше иметь модель пользователя, в которой содержится вся основная информация (день рождения, пол), а затем наследовать от этого ученика / репетитора?

2 ответа

Решение

Я думаю, что это лучше для Student а также Tutor унаследовать от вашего User модель. Вы можете сохранить данные в той же таблице базы данных, используя STI в рельсах.

Этот подход обеспечит четкое разделение ответственности в вашем домене при повторном использовании того же процесса аутентификации (и последующей авторизации).

Я хотел бы иметь модель пользователя с базовой информацией, а затем что-то вроде этого:

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

Таким образом, пользователь может легко быть репетитором и учеником и просто должен иметь доступ к общей информации. Я бы, вероятно, вставил специальные модели репетитора / ученика, если возникнет такая необходимость.

Другие вопросы по тегам