2

我正在尝试编写一个应用程序,允许用户使用状态机 gem管理工作流,但我不确定如何继续允许用户使用状态机 gem 为 ruby​​ 定义自己的状态机。

在 gem 文档的动态定义部分中,它说我应该能够通过用数据源替换下面这样的代码来做到这一点。

   def transitions
    [
      {:parked => :idling, :on => :ignite},
      {:idling => :first_gear, :first_gear => :second_gear, :on => :shift_up}
      # ...
    ]
  end

我不知道该怎么做。如何定义数据库中的转换?

4

1 回答 1

6

因为transitions它只是一种方法,你可以以任何你想要的方式实现它。这是一种可能的方法。

我假设您正在使用 ActiveRecord。

定义一个转换模型和一个关联的转换表,其中包含所有字符串的 to、from 和 on 列。然后您可以开始定义转换,例如:

Transition.create(:from => "parked", :to => "idling", :on => "ignite")

然后在您的转换方法中:

def transitions
  transitions_data = []
  Transition.all.each do |transition|
    transitions_data << { transition.from.to_sym => transition.to.to_sym, :on => transition.on.to_sym }  
  end
  transitions_data
end

然后,您可以使用链接的文档中的其他代码来动态创建状态机。

这只是一个例子,可以进一步优化。我会把那部分留给你。希望这会给你一个好的开始。

于 2013-01-16T01:02:25.673 回答