Ruby on rails приглашение / зачисление
В настоящее время я создаю приложение, частью которого является система приглашения / регистрации. В настоящее время в системе есть "курсы" и "классы". Таким образом, "курс" - это некоторый курс, а "класс" - это конкретный экземпляр курса. F.ex. это может быть 1 курс, но 3 классных экземпляра этого курса с разными датами начала / окончания, немного другими / обновленными материалами и т. д. Теперь "сотрудник" может быть приглашен для участия в "курсе", но "сотрудники" "сами должны выбрать конкретную" классную комнату "для зачисления. Таким образом, сотрудник переходит на страницу своего профиля, где отображаются приглашения. Теперь сотрудник нажимает на приглашение и затем может выбрать конкретную классную комнату для зачисления. Очевидно, это должно создать зачисление. Но, это должно также избавиться от приглашения, так как это было "принято". В настоящее время я установил так, чтобы у "сотрудников" было много "классных комнат" через "зачисления". Кроме того, у "сотрудника" есть много "курсов" через "приглашения". Однако это кажется неправильным, поскольку, когда сотрудник нажимает на какое-либо приглашение, они будут перенаправлены на страницу регистрации (контроллер регистрации), где будет создана регистрация. Поскольку регистрация создана, приглашение должно быть удалено, хотя. Так что сейчас я думаю, что контроллер регистрации должен иметь возможность создавать регистрации и удалять приглашения. Это похоже на плохой дизайн. Я очень доволен отношениями между классными комнатами и сотрудниками, но отношения между сотрудниками и приглашениями кажутся плохими. Как бы вы это сделали?
2 ответа
Почему бы вам не использовать просто status
приписать в вашей модели управляемую процедуру приглашения?
Я буду использовать следующие модели:
Employee
пользователь приложения;Course
курс, которому нужно следовать;Classroom
принадлежащий кCourse
(курс, имеющий многоclassrooms
).Participation
, делая связь между сотрудником, курсом и классной комнатой. Эта модель будет иметь статус в зависимости от эволюции участия в курсе:invited
когда сотрудник был приглашен,enrolled
когда сотрудник выбрал классную комнату и т. д.
Скелет Participation
модель будет:
class Participation < ActiveRecord::Base
attr_accessible :status
belongs_to :employee
belongs_to :course
belongs_to :classroom
#...
validates_uniqueness_of :employee_id, :scope => [course_id, :classroom_id]
end
С требованием уникальности для сотрудника дан курс и класс. И может быть только для самого курса без учета классной комнаты в зависимости от вашего выбора.
Я добавлю уникальный индекс на Participations
Таблица:
add_index :participation, [employee_id, course_id, classroom_id], unique => true
По приглашению будет создан экземпляр участия (статус invited
с соответствующими employee_id
и course_id
, classroom_id
оставаясь пустым. При зачислении участие будет обновлено с classroom_id
и статус enrolled
,
Это соответствует вашим потребностям?
Простым решением было бы добавить accepted
логическое поле для модели приглашения. Как только класс / курс выбран, установите accepted
к истине. Затем на странице профиля отображаются только приглашения, где accepted
ложно