0

我目前正在构建一个应用程序,其中一部分是邀请/注册系统。目前系统中有“课程”和“教室”。因此,“课程”是一些课程,“教室”是课程的特定实例。前任 可能有 1 门课程,但该课程的 3 个课堂实例,具有不同的开始/结束日期、略有不同/更新的材料等。现在,可以邀请“员工”参加“课程”,但“员工” ” 他们自己,必须选择一个特定的“教室”来注册。因此,员工会转到他/她的个人资料页面,其中会显示邀请。现在员工单击邀请,然后可以选择要注册的特定教室。这显然应该创建一个注册。但,它也应该摆脱邀请,因为它已被“接受”。目前我已经设置好,以便“员工”通过“注册”拥有许多“教室”。此外,“员工”通过“邀请”有许多“课程”。但这似乎不对,因为当员工单击某个邀请时,他们将被带到一个注册页面(注册控制器),在那里将创建一个注册。创建注册后,应删除邀请。所以现在我猜注册控制器应该能够创建注册和删除邀请。这似乎是糟糕的设计。我对教室和员工之间的关系很满意,但员工和邀请之间的关系似乎很糟糕。你会怎么做?因为它已被“接受”。目前我已经设置好,以便“员工”通过“注册”拥有许多“教室”。此外,“员工”通过“邀请”有许多“课程”。但这似乎不对,因为当员工单击某个邀请时,他们将被带到一个注册页面(注册控制器),在那里将创建一个注册。创建注册后,应删除邀请。所以现在我猜注册控制器应该能够创建注册和删除邀请。这似乎是糟糕的设计。我对教室和员工之间的关系很满意,但员工和邀请之间的关系似乎很糟糕。你会怎么做?因为它已被“接受”。目前我已经设置好,以便“员工”通过“注册”拥有许多“教室”。此外,“员工”通过“邀请”有许多“课程”。但这似乎不对,因为当员工单击某个邀请时,他们将被带到一个注册页面(注册控制器),在那里将创建一个注册。创建注册后,应删除邀请。所以现在我猜注册控制器应该能够创建注册和删除邀请。这似乎是糟糕的设计。我对教室和员工之间的关系很满意,但员工和邀请之间的关系似乎很糟糕。你会怎么做?通过“邀请”。但这似乎不对,因为当员工单击某个邀请时,他们将被带到一个注册页面(注册控制器),在那里将创建一个注册。创建注册后,应删除邀请。所以现在我猜注册控制器应该能够创建注册和删除邀请。这似乎是糟糕的设计。我对教室和员工之间的关系很满意,但员工和邀请之间的关系似乎很糟糕。你会怎么做?通过“邀请”。但这似乎不对,因为当员工单击某个邀请时,他们将被带到一个注册页面(注册控制器),在那里将创建一个注册。创建注册后,应删除邀请。所以现在我猜注册控制器应该能够创建注册和删除邀请。这似乎是糟糕的设计。我对教室和员工之间的关系很满意,但员工和邀请之间的关系似乎很糟糕。你会怎么做?邀请应该被删除。所以现在我猜注册控制器应该能够创建注册和删除邀请。这似乎是糟糕的设计。我对教室和员工之间的关系很满意,但员工和邀请之间的关系似乎很糟糕。你会怎么做?邀请应该被删除。所以现在我猜注册控制器应该能够创建注册和删除邀请。这似乎是糟糕的设计。我对教室和员工之间的关系很满意,但员工和邀请之间的关系似乎很糟糕。你会怎么做?

4

2 回答 2

0

为什么不简单地使用status模型中的属性来管理邀请过程?

我将使用以下模型:

  1. Employee,应用程序的用户;
  2. Course,要遵循的过程;
  3. Classroom,属于a Course(一个有很多的课程classrooms)。
  4. 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_idclassroom_id留空。在注册时,将使用classroom_id和 状态更新参与enrolled

它符合您的需求吗?

于 2012-10-27T20:20:33.940 回答
0

一个简单的解决方案是accepted在邀请模型中添加一个布尔字段。选择课堂/课程后,设置accepted为 true。然后在个人资料页面上,仅显示accepted虚假邀请。

于 2012-10-27T20:24:52.047 回答