2011-10-24 184 views
0

我有一個會議模型,其中有許多參與者。每個參與者可以針對會議採取多種行動(註冊,接受,拒絕等)。會議狀態(待定,確認等)取決於每個參與者的最新動作及其屬性(過期日期等)。設計模式:Rails中子狀態父項的聚合狀態

例如,如果所有參與者都接受,則會議狀態將爲「已確認」。但是,如果會議確認後,一位參與者提出新的時間(因時間衝突),則會議現在變爲「待定」。

我應該如何在會議中模擬狀態?我應該序列化(即在事件表中創建一個latest_state列)當前狀態嗎?如果是這樣,我該如何使用基於子對象行爲的狀態機?

謝謝。

+0

對不起

class Participant < ActiveRecord::Base belongs_to :meeting after_update :update_meeting_after_change def update_meeting_after_change self.meeting.update_status if self.status_changed? end end class Meeting < ActiveRecord::Base has_many :participants def update_status #logic here end end 

self.status_changed?將返回true,不知道我明白。會議狀態僅取決於每個參與者的最近行動? 「行動」包括什麼? –

+0

例如,如果所有參與者都接受,則會議狀態將被確認。但是,如果確認後,一位參與者提出新的時間(由於時間衝突),那麼會議現在正在等待。等等。 – AdamNYC

回答

0

也許是最好的解決辦法是觸發會議狀態更新當參與者模型更新:如果Participantstatus屬性在更新過程中改變