如何根据DB中的用户定义数据为状态机创建动态定义

SJP*_*SJP 2 ruby-on-rails state-machine state-machine-workflow

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

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

   def transitions
    [
      {:parked => :idling, :on => :ignite},
      {:idling => :first_gear, :first_gear => :second_gear, :on => :shift_up}
      # ...
    ]
  end
Run Code Online (Sandbox Code Playgroud)

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

Jos*_*ken 6

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

我假设您正在使用ActiveRecord.

使用to,from和on列定义Transition模型和关联的转换表,所有字符串.然后你可以开始定义转换,例如:

Transition.create(:from => "parked", :to => "idling", :on => "ignite")
Run Code Online (Sandbox Code Playgroud)

然后在你的过渡方法中:

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
Run Code Online (Sandbox Code Playgroud)

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

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