为Rails模型实现条件状态机

时间:2019-04-22 07:04:29

标签: ruby-on-rails state-machine aasm

我有一个名为Creative的Rails模型,该模型使用aasm gem来实现工作流程。目前,我的模型中仅实现了一个工作流程。

我有一个业务场景,要求我在同一模型中实施另一个工作流,如果模型上的布尔值是true,则会激活该工作流。

我看到2种可行的方法

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

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

我知道这是一个非常开放的问题,如果有人遇到过这种情况,我希望获得建议

1 个答案:

答案 0 :(得分: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个工作流程,这可能会变得很复杂。

没有两个工作流程就可以了