Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/54.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 设计模式:从Rails中的子状态聚合父状态_Ruby On Rails_Ruby_Parent Child_State Machine - Fatal编程技术网

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
属性在更新过程中更改

对不起,我不确定是否理解。会议状态仅取决于每个与会者最近的行动?“行动”包括什么?例如,如果所有参与者都接受,那么会议状态将得到确认。然而,若在确认后,一位与会者提出了一个新的时间(因为时间冲突),那个么会议现在待定。等等