Ruby on rails邀请/注册

时间:2012-10-27 18:56:27

标签: ruby-on-rails ruby invitation

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

2 个答案:

答案 0 :(得分:0)

为什么不在模型中仅使用status属性来管理邀请程序?

我将使用以下型号:

  1. Employee,该应用的用户;
  2. Course,要遵循的课程;
  3. Classroom,属于Course(一门课程有很多classrooms)。
  4. Participation,在员工,课程和课堂之间建立联系。此模型的状态取决于参与课程的演变:invited员工被邀请时,enrolled员工选择课堂时等等。
  5. 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_idcourse_idclassroom_id为空。在注册时,参与将使用classroom_id和状态enrolled进行更新。

    它是否符合您的需求?

答案 1 :(得分:0)

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