我目前正在构建一个应用程序,其中的一部分是邀请/注册系统。目前在系统中有“课程”和“教室”。因此,“课程”是某个课程,而“课堂”是课程的具体实例。F.ex。可能有1门课程,但该课程的3个课堂实例,具有不同的开始/结束日期,略有不同/更新的材料等。现在,可以邀请“员工”参加“课程”,但“员工”自己必须选择一个特定的“课堂”注册。因此,该员工转到他/她的个人资料页面,在那里显示邀请。现在,员工单击一个邀请,然后可以选择要注册的特定课堂。这显然应该创建一个注册。但是,它也应该摆脱邀请,因为它已经“接受”了。目前,我将其设置为“员工”通过“注册”拥有许多“教室”。此外,“员工”通过“邀请”有许多“课程”。但这似乎并不正确,因为当员工单击某些邀请时,他们将被带到注册页面(注册控制器),在那里将创建注册。注册创建完成后,邀请应被删除。所以现在我猜注册控制器应该能够创建注册和删除邀请。这似乎是一个糟糕的设计。我对教室和员工之间的关系很满意,但员工和邀请函之间的关系似乎很糟糕。你会怎么做?
发布于 2012-10-28 04:20:34
为什么不在模型中简单地使用status属性来管理邀请过程呢?
我将使用以下模型:
Employee,app;Course,的用户将属于followed;Classroom,的课程属于classrooms).Participation,(具有在雇员、课程和教室之间建立联系的多个Course的课程)。此模型的状态取决于课程的参与情况:当员工被邀请时为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和status enrolled更新参与。
它适合你的需求吗?
发布于 2012-10-28 04:24:52
一个简单的解决方案是向邀请模型添加一个accepted布尔型字段。选择教室/课程后,将accepted设置为true。然后在配置文件页面上,仅在accepted为false的情况下显示邀请。
https://stackoverflow.com/questions/13103160
复制相似问题