我有一个会议模型,有很多参与者。每个参与者可以针对会议采取多种行动(注册,接受,拒绝等)。会议状态(待定,确认等)取决于每个参与者的最新行动及其自身属性(过期日期等)。
例如,如果所有参与者都接受,则会议状态将被“确认”。但是,如果在确认会议后,一位参与者提议新的时间(由于时间冲突),那么会议现在变为“待定”。
我应该如何在会议中建模状态?我应该序列化(即,在事件表中创建latest_state列)当前状态吗?如果是这样,我如何使用基于子对象操作的状态机?
谢谢。
答案 0 :(得分: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?
的{{1}}属性发生了更改, true
将返回Participant