在我们的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
文档中没有看到这些方法,并且想知道是否有任何类型的实现。或导致此类实施的方法。
答案 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.