Ruby on rails 设计模式:从Rails中的子状态聚合父状态
我有一个会议模型,有很多参与者。每个参与者都可以对会议采取多个操作(注册、接受、拒绝等)。会议状态(待定、已确认等)取决于每位与会者的最新行动及其自身属性(过期日期等)Ruby on rails 设计模式:从Rails中的子状态聚合父状态,ruby-on-rails,ruby,parent-child,state-machine,Ruby On Rails,Ruby,Parent Child,State Machine,我有一个会议模型,有很多参与者。每个参与者都可以对会议采取多个操作(注册、接受、拒绝等)。会议状态(待定、已确认等)取决于每位与会者的最新行动及其自身属性(过期日期等) 例如,如果所有参与者都接受,则会议状态将为“已确认”。然而,如果会议确认后,一位与会者提出了一个新的时间(因为时间冲突),那么会议现在将变为“待定” 我应该如何在会议中模拟状态?我是否应该序列化(即在事件表中创建最新的_state列)当前状态?如果是这样,我如何使用基于子对象动作的状态机 谢谢。最好的解决方案可能是在更新参与者模
例如,如果所有参与者都接受,则会议状态将为“已确认”。然而,如果会议确认后,一位与会者提出了一个新的时间(因为时间冲突),那么会议现在将变为“待定” 我应该如何在会议中模拟状态?我是否应该序列化(即在事件表中创建最新的_state列)当前状态?如果是这样,我如何使用基于子对象动作的状态机
谢谢。最好的解决方案可能是在更新参与者模型时触发会议状态更新:
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
class参与者
self.status\u changed?
将返回true
,如果参与者的status
属性在更新过程中更改对不起,我不确定是否理解。会议状态仅取决于每个与会者最近的行动?“行动”包括什么?例如,如果所有参与者都接受,那么会议状态将得到确认。然而,若在确认后,一位与会者提出了一个新的时间(因为时间冲突),那个么会议现在待定。等等