我目前正在构建一个应用程序,其中一部分是邀请/注册系统。目前系统中有“课程”和“教室”。因此,“课程”是一些课程,“教室”是课程的特定实例。前任 可能有 1 门课程,但该课程的 3 个课堂实例,具有不同的开始/结束日期、略有不同/更新的材料等。现在,可以邀请“员工”参加“课程”,但“员工” ” 他们自己,必须选择一个特定的“教室”来注册。因此,员工会转到他/她的个人资料页面,其中会显示邀请。现在员工单击邀请,然后可以选择要注册的特定教室。这显然应该创建一个注册。但,它也应该摆脱邀请,因为它已被“接受”。目前我已经设置好,以便“员工”通过“注册”拥有许多“教室”。此外,“员工”通过“邀请”有许多“课程”。但这似乎不对,因为当员工单击某个邀请时,他们将被带到一个注册页面(注册控制器),在那里将创建一个注册。创建注册后,应删除邀请。所以现在我猜注册控制器应该能够创建注册和删除邀请。这似乎是糟糕的设计。我对教室和员工之间的关系很满意,但员工和邀请之间的关系似乎很糟糕。你会怎么做?因为它已被“接受”。目前我已经设置好,以便“员工”通过“注册”拥有许多“教室”。此外,“员工”通过“邀请”有许多“课程”。但这似乎不对,因为当员工单击某个邀请时,他们将被带到一个注册页面(注册控制器),在那里将创建一个注册。创建注册后,应删除邀请。所以现在我猜注册控制器应该能够创建注册和删除邀请。这似乎是糟糕的设计。我对教室和员工之间的关系很满意,但员工和邀请之间的关系似乎很糟糕。你会怎么做?因为它已被“接受”。目前我已经设置好,以便“员工”通过“注册”拥有许多“教室”。此外,“员工”通过“邀请”有许多“课程”。但这似乎不对,因为当员工单击某个邀请时,他们将被带到一个注册页面(注册控制器),在那里将创建一个注册。创建注册后,应删除邀请。所以现在我猜注册控制器应该能够创建注册和删除邀请。这似乎是糟糕的设计。我对教室和员工之间的关系很满意,但员工和邀请之间的关系似乎很糟糕。你会怎么做?通过“邀请”。但这似乎不对,因为当员工单击某个邀请时,他们将被带到一个注册页面(注册控制器),在那里将创建一个注册。创建注册后,应删除邀请。所以现在我猜注册控制器应该能够创建注册和删除邀请。这似乎是糟糕的设计。我对教室和员工之间的关系很满意,但员工和邀请之间的关系似乎很糟糕。你会怎么做?通过“邀请”。但这似乎不对,因为当员工单击某个邀请时,他们将被带到一个注册页面(注册控制器),在那里将创建一个注册。创建注册后,应删除邀请。所以现在我猜注册控制器应该能够创建注册和删除邀请。这似乎是糟糕的设计。我对教室和员工之间的关系很满意,但员工和邀请之间的关系似乎很糟糕。你会怎么做?邀请应该被删除。所以现在我猜注册控制器应该能够创建注册和删除邀请。这似乎是糟糕的设计。我对教室和员工之间的关系很满意,但员工和邀请之间的关系似乎很糟糕。你会怎么做?邀请应该被删除。所以现在我猜注册控制器应该能够创建注册和删除邀请。这似乎是糟糕的设计。我对教室和员工之间的关系很满意,但员工和邀请之间的关系似乎很糟糕。你会怎么做?
问问题
730 次
2 回答
0
为什么不简单地使用status
模型中的属性来管理邀请过程?
我将使用以下模型:
Employee
,应用程序的用户;Course
,要遵循的过程;Classroom
,属于aCourse
(一个有很多的课程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
。
它符合您的需求吗?
于 2012-10-27T20:20:33.940 回答
0
一个简单的解决方案是accepted
在邀请模型中添加一个布尔字段。选择课堂/课程后,设置accepted
为 true。然后在个人资料页面上,仅显示accepted
虚假邀请。
于 2012-10-27T20:24:52.047 回答