2012-10-27 72 views
0

我目前正在構建一個應用程序,其中一部分是邀請/註冊系統。目前系統中有「課程」和「教室」。因此,「課程」是一門課程,而「課堂」是課程的具體實例。 F.ex.可能有1門課程,但有3課堂實例,有不同的開始/結束日期,略有不同/更新的材料等。現在,可以邀請「員工」參加「課程」,但「員工「他們自己必須選擇一個特定的」教室「才能加入。所以,員工會進入他/她的個人資料頁面,邀請函顯示在該頁面上。現在,員工點擊邀請,然後可以選擇一個特定的教室註冊。這顯然應該創建一個註冊。但是,它也應該擺脫邀請,因爲它已被「接受」。目前,我已設定「僱員」通過「登記」擁有許多「教室」。另外,「員工」通過「邀請」有很多「課程」。這看起來並不正確,因爲當員工點擊某個邀請時,他們將被帶到註冊頁面(註冊控制器),註冊頁面將被創建。當註冊被創建時,邀請應該被刪除。所以現在我猜想登記控制器應該能夠創建註冊和刪除邀請。這似乎是不好的設計。我對課堂和員工之間的關係感到非常滿意,但員工和邀請之間的關係似乎很糟糕。你會怎麼做?Ruby on rails邀請/註冊

回答

0

爲什麼不簡單地在模型中使用status屬性來管理邀請過程?

我將使用以下型號:

  1. Employee,應用程序的用戶;
  2. Course,要遵循的過程;
  3. Classroom,屬於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 

在與相應的employee_idcourse_idclassroom_id參與實例將被創建的邀請(狀態invited)被保留爲空。在參與者中,參與者將被更新爲classroom_id和狀態enrolled

它適合您的需求嗎?

+0

它適合。謝謝! – Kasper

0

一個簡單的解決方案是將accepted布爾型字段添加到邀請模型中。一旦選擇了教室/課程,請將accepted設置爲true。然後在個人資料頁面上,只顯示accepted爲假的邀請。