基于模型属性的StateMachine转换

时间:2018-07-23 15:30:22

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

我正在使用finite machine处理Project的状态。每个项目都属于一个Category,每个类别都有许多Step。 现在,我想在ProjectStateMachine中定义next事件,该事件根据项目的当前状态和所属类别将项目转移到下一步。

例如,假设我有一个与new lab类别关联的“ submitted”项目(处于equipment状态)。 equipment类别包含['submitted', 'started', 'completed']个步骤。

next项目发生new lab事件时,其状态变为started,然后再次发生next事件时,项目进入{{1 }}状态。

有没有办法做到这一点?

1 个答案:

答案 0 :(得分:1)

我不熟悉该特定的宝石(稍后会详细介绍),但是我认为您可以执行以下操作:

events {
  self.category.steps.each_cons(2) do |set|
    event :next, set[0].to_sym => set[1].to_sym
  end
}

但是话虽如此,您所引用的gem已有一年多没有更新了。我建议您使用诸如this之类的最新版本(如果您使用的是基于state-machines gem的ActiveRecord)。最后一个链接将您带到动态定义的特定部分,这无疑会为您提供所需的内容。

欢呼