2011-10-24 185 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属性在更新过程中改变