如何确定实例是否处于工作流状态机定义的最终状态?

时间:2014-01-10 17:36:25

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

在我们的rails 3.2 app with gem workflow中,workflow的定义如下:

   workflow do          
        state :new do
          event :submit, :transitions_to => :being_reviewed
        end
        state :being_reviewed do
          event :approve, :transitions_to => :approved
          event :reject, :transitions_to => :rejected
        end
        state :approved
        state :rejected

    end

初始状态定义为:new,最终状态为:approved:rejected。有方法可以说明:

1.如果一个实例处于最终(完成)状态,如下所示:

instance.final_state? #return either true or false

2.返回工作流程的最终状态,如下所示:

instance.return_final_state = ['approved', 'rejected']

我们在gem workflow文档中没有看到这些方法,并且想知道是否有任何类型的实现。或导致此类实施的方法。

2 个答案:

答案 0 :(得分:1)

我没有看到,但你可以查看instance.approved?instance.rejected?

并且,我猜你可以创建一个方便的方法来组合这些:

def workflow_completed?
  approved? || rejected?
end 

答案 1 :(得分:0)

以下是我们为gem workflow找到的解决方案。 Model.workflow_spec.state_names按照定义的顺序返回状态名称数组。因此最终状态将是最后一个或最后两个状态,具体取决于模型。因此,我们可以通过以下方式形成最终状态数组:

states_array = Model.workflow_spec.state_names
final_state = []
final_state << state_array[-1]
final_state << state_array[-2] 

要判断实例的状态是否处于最终状态,我们可以这样做:

final_state.include?(instance.current_state) #true if it is, or false if it is not.
相关问题