为rails模型实现条件状态机

问题描述 投票:0回答:1

我有一个名为Creative的轨道模型,它使用aasm gem实现工作流程。目前我的模型只有一个工作流程在其中实现。

我有一个业务场景,需要我在同一个模型中实现另一个工作流,如果模型上的布尔值是true,它将被激活。

我认为有两种方法可行

  • 创建一个与Creative使用相同表名的新模型,并在那里实现工作流程
  • 使用单独的列在同一模型中实现工作流,以存储第二个工作流的状态,并根据我的布尔值使用其方法

什么是可以在这里实施的好设计?

我知道这是一个非常开放的问题,如果有人遇到这种情况,我很乐意得到建议

ruby-on-rails state-machine aasm
1个回答
1
投票

我觉得这样的事情应该有效。

event :promote do
  transitions :from => [:pending], :to => :in_progress, :guard => :boolean_check?
  transitions :from => [:pending], :to => :done
end

event :complete do
  transitions :from => [:in_progress], :to => :done, :guard => :boolean_check?
end

private

def boolean_check?
  self.boolean_column
end

如果布尔值为true,则流程为

pending > in_progress > done

其他

pending > done

注意:如果假设您有3-4个工作流程,这可能会变得复杂。

没有2个工作流程,这没关系

© www.soinside.com 2019 - 2024. All rights reserved.